2012-09-17 51 views
0

我有一個與購買模型有很多關係的簡單客戶模型。使用聯接(Rails)指定has_many關聯的默認排序?

class Customer < ActiveRecord::Base 
    has_many :purchases 
end 

我多次發現,我需要在我在下面的意見的方式訂購Customer.purchases:

@customer.purchases.joins(:shop).order("shops.position").order(:position) #yes, two orders chained 

在保持事物DRY的利益,我希望把這個地方集中,所以我不必反覆做。理想情況下,我希望將其作爲Customer.purchases的默認排序。例如:

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

顯然上述不起作用。我應該怎麼做?

回答

0

在您指定的客戶模型中連接(:shop)是關鍵值:訂單。我覺得現在的問題,所以你可以使用加入作爲重點,而不是像下面順序,

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

我認爲它可能工作。

+0

似乎沒有工作。給我一個'未定義的方法'鍵?'爲零:NilClass'錯誤。 –

+0

請使用:joins => [:shop] – Mohanraj

+0

不可以。仍然有同樣的錯誤... –

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 
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從您的意見。