0

購入モデルと多くの関係がある単純な顧客モデルがあります。

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

顧客モデルで指定したjoins(:shop)は、キー:orderの値です。ここに問題があると思います。したがって、以下のように順序の代わりに結合をキーとして使用できます。

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

うまくいくかもしれないと思います。

于 2012-09-17T05:26:37.323 に答える
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 に答える