【问题标题】:Rails Activerecord Ambiguous column name on .joinsRails Activerecord .joins 上的列名不明确
【发布时间】:2015-05-15 23:06:45
【问题描述】:

这是我的代码。如果我在 :search 字段中有某些内容,或者如果我在 :supplier 字段中有某些内容,但如果我在这两个字段中都有某些内容,我会得到“不明确的列名 'NUMBER'”。有没有办法选择AS什么的?

@date_from = params[:date_from]  ||     Date.today.beginning_of_month.strftime('%m/%d/%Y')
@date_to = params[:date_to] ||  Date.today.strftime('%m/%d/%Y')
q = "%#{params[:search]}%"

@products = Product.where("DISCONT = ? AND NONPRODUCT = ?" ,0,0)
@products = @products.where('NUMBER like ?' ,q) if params[:search].present?
@products = @products.joins(:supplier_items).where('SUPPLIER = ?' ,params[:supplier]) if params[:supplier].present?
@products = @products.paginate(page: params[:page], per_page: 25)

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

    只需在数字前加上表名

    例如:

    @products = Product.where(:discount => 0, :nonproduct => 0)
    @products = @products.where('products.number like ?', query)
    

    【讨论】:

    • 这就是我的想法,但是当我添加产品时。我收到以下错误:“ TinyTds::Error: The multi-part identifier "products.NUMBER" could not be bound.: EXEC sp_executesql N'SELECT TOP (25) [__rnt].* FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY [STOCK].[STOCK_ID] ASC) AS [__rn], [STOCK].* FROM [STOCK] WHERE (DISCONT = 0 AND NONPRODUCT = 0) AND (products.NUMBER like N''%ipob%'') ) AS [__rnt] WHERE [__rnt].[__rn] > (0) ORDER BY [__rnt].[__rn] ASC'"
    • 你的表名是库存还是产品?那个 SQL 看起来像股票。
    • 数据库中的表是 STOCK 但在产品模型中我有 self.table_name = 'STOCK'
    • 所以使用stock.number like ?
    【解决方案2】:

    我猜你的suppliers 表和products 表都有一个名为“数字”的列。老实说,您最好立即运行迁移以更改列名(可能是 supplier_num / product_num),因为将其保留为像“数字”这样通用的名称可能会一直让您头疼。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 2018-01-21
      • 2020-11-28
      • 2023-03-08
      相关资源
      最近更新 更多