ruby-on-rails 如何在Rails中命令has_one关联?

nx7onnlm  于 12个月前  发布在  Ruby
关注(0)|答案(2)|浏览(121)
class Order < ActiveRecord::Base
  has_many :line_items
end

class LineItem < ActiveRecord::Base      
  has_one :product
end

我想用产品名称排序我的订单。我试着按照其他回答的建议去做。

Order.last.line_items.includes(:product).order('products.name ASC')

但它抛出一个错误

ActiveRecord::StatementInvalid: PG::Error: ERROR:  column reference "created_at" is ambiguous
rjjhvcjd

rjjhvcjd1#

我想你在模型LineItem中定义了default_scope,类似于这样:
default_scope { order(created_at: :asc) }
Order.last.line_items将按created_at排序,但表products也有列created_at,所以 column reference "created_at" is ambiguous
要解决这个问题,有一些选择:

  • 明确定义default_scopedefault_scope { order('line_items ASC') }
  • 使用以下命令删除order子句:unscope(:order)reorder(nil)

Order.last.line_items.includes(:product).unscope(:order).order('products.name ASC')

txu3uszq

txu3uszq2#

SQL中有模糊的信息。尝试将references添加到代码中:

Order.last.line_items.includes(:product).order('products.name ASC').references(:product)

相关问题