0

我有一个简单的 Customer 模型,它与 Purchase 模型有很多关系。

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

显然上面的行不通。我该怎么做?

4

3 回答 3

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从您的意见中调用。

于 2014-10-21T09:16:35.477 回答
0

在您的购买模型中,您可以创建一个类方法:

购买.rb:

def self.order_by_position
  joins(:shop).order("shops.position").order(:position)
end

然后你可以这样说:

@customer.purchases.order_by_position
Purchase.order_by_position
于 2012-09-17T08:00:23.910 回答
0

在您的客户模型中,您指定joins(:shop)是键:order的值。我认为这是问题所在,因此您可以使用联接作为键而不是像下面这样的顺序,

class Customer < ActiveRecord::Base
  has_many :purchases, :joins => [:shop], :order => "shops.position"
end

我认为它可能会奏效。

于 2012-09-17T05:26:37.323 回答