2012-05-16 96 views
0

以下工作,正確,但似乎我可能沒有利用我應該在rails中的東西。工作位是:是否有更多的「活動記錄」正確寫這個查詢的方式?

MaxOffer.joins("JOIN items ON items.id = max_offers.item_id") 
     .order('amount_in_cents desc') 
     .where('items.id = 20') 
     .limit(5).collect do |moffer| 

起初,我以爲我沒有明確地使用一個加入,因爲模型是:

class MaxOffer < ActiveRecord::Base 
    belongs_to :item 
    belongs_to :user 

class User < ActiveRecord::Base 
    has_many :bids 
    has_many :max_offers 

但是,當我試圖在簡單地使用item.id了錯誤where子句。有沒有更正確的方法來做到這一點,或明確包括必要的連接?

+0

總的來說,我認爲你所做的很好。我提出的改變是非常小的。 –

+0

我沒有使用佔位符的唯一原因int他在哪裏,因爲我只是想獲得activerecord的掛件 - 但是很高興得到了一些確認,我沒有錯過某些rails魔術。 – Will

回答

1

鑑於MaxOffer和項目之間的關係,這應該工作:

MaxOffer.joins(:item) 
    .where('items.id = ?', 20) 
    .order('amount_in_cents desc') 
    .limit(5).collect do |moffer| 

我跑他們倆,並期待在產生,看看是否有差異的SQL。

+0

顯然它必須是'.joins(:item)'(單數)......我根據[RoR網站]上的文檔發佈之前,實際上已經嘗試過您的示例(http://guides.rubyonrails.org /active_record_querying.html) - 但該指南顯然不正確? – Will

+0

感謝您的注意 - 我更正了我的答案。這可能取決於你指定的方向。例如'MaxOffer.joins(:item)'-v-'User.joins(:max_offers)'取決於關係是'belongs_to'還是'has_many'。 –