我有一个简单的客户模型,与购买模型有很多关系。
class Customer < ActiveRecord::Base
has_many :purchases
end
我一再发现我需要通过以下方式在我的观看中订购Customer.purchases:
@customer.purchases.joins(:shop).order("shops.position").order(:position) #yes, two orders chained
为了保持干燥,我想把它放在一个集中的地方,所以我不必反复这样做。理想情况下,我想将其作为Customer.purchases的默认排序。例如:
class Customer < ActiveRecord::Base
has_many :purchases, :order => joins(:shop).order("shops.position").order(:position)
end
显然上述方法不起作用。我该怎么做?
答案 0 :(得分:0)
在您的客户模型中,您指定加入(:商店)是键:订单的值。我认为这是问题,所以你可以使用连接作为键而不是下面的顺序,
class Customer < ActiveRecord::Base
has_many :purchases, :joins => [:shop], :order => "shops.position"
end
我认为它可能有用。
答案 1 :(得分:0)
在您的购买模式中,您可以创建一个类方法:
Purchase.rb:
def self.order_by_position
joins(:shop).order("shops.position").order(:position)
end
然后你可以这样说:
@customer.purchases.order_by_position
Purchase.order_by_position
答案 2 :(得分:0)
您可以在Customer
上创建一个返回已订购商品的方法:
class Customer < ActiveRecord::Base
has_many :purchases
def ordered_purchases
purchases.joins(:shop).order("shops.position").order(:position)
end
end
并从您的观看中致电@customer.ordered_purchases
。