2013-10-09 29 views
6

我有一個PROC以下工作的has_many捕捉上下文參數:轉換軌道4的has_many從PROC條件的地方

has_many :subclass_point_analytics, :conditions => proc {"assessment_id = #{self.send(:assessment_id)}" }, :foreign_key => 'gid', :dependent => :destroy 

我用Rails 4,它是(理所當然)抱怨使用條件。 30分鐘和大量的嘗試後,我無法弄清楚如何將條件轉換爲 - > {where ...}格式。我將不勝感激具有proc語法知識的人來幫助我獲得正確的結果。

+0

您是否找到針對您的問題的解決方案? – Thomas

回答

15

只是這樣做:

has_many :subclass_point_analytics, -> (object) { where("assessment_id = ?", object.assessment_id) }, :foreign_key => 'gid', :dependent => :destroy 

對象是你的實際情況。 另外,請注意:可調用必須是第一件事情(:條件往往是最後)

+0

爲我完美工作。還建議將「對象」變量重命名爲更具體的域名。 – raeno

+1

只是想補充一點,我已經反覆使用這個「必要」的地方,它像一個魅力一樣工作。謝謝@Thomas的答案。 – TJChambers

+0

如何在rails 3.2中做到這一點? –

0

我的是這樣開始:

has_many :subclass_point_analytics, -> { where("assessment_id = #{self.send(:assessment_id)}") }, :foreign_key => 'gid', :dependent => :destroy 
+0

這也是我開始的地方,但是由於缺少了proc元素,它不起作用。我的問題是如何在轉換過程中保留proc元素。 – TJChambers

+0

Proc甚至是必要的,這似乎很奇怪。 subclass_point_analytics是否可能屬於同一模型,但有多個assessment_id?如果是這樣,那麼你將如何檢索他們與協會?似乎完全放棄條件應該是可以的。 – davidfurber

+0

它不可能有多個評估,但是這個條件被用作assessment_id是主鍵,並且是分區鍵的一部分。沒有它的性能差異是數據集大小的1000倍。 – TJChambers