2014-01-06 55 views
0

當項目使用Rails 3時,我創建了這個關聯。因爲我們已經升級到了Rails 4,現在我得到了一個有關這個的棄用警告。以下代碼是Rails 4說過時的一個示例。使用Proc.new的Rails 4在活動記錄關聯中的條件

has_one :original_participant, 
    :through => :original_participation, 
    :source => :participants, 
    :conditions => Proc.new { 
    unless self.respond_to?(:organization_id) 
     "original_participants_surveys_participants.organization_id = surveys_participants.organization_id" 
    else 
     "surveys_participants.organization_id = #{self.organization_id}" 
    end 
    } 

代碼在條件塊內部有except條件的原因是由於sphinx。當獅身人面像正在構建它的索引時,它不會有可用的organization_id。當使用標準的Active Record調用時,它將具有organization_id。所以我需要在這個過程中做到這一點,並且沒有定義organization_id。我已經做了一些研究,至今還沒有提出任何解決方案來實現Rails 4的方式。這仍然在Rails 4中正常工作,但我仍然不斷收到棄用警告。

冗長的問題簡短如何將此轉換爲與Rails 4兼容,而不會丟失檢查organization_id是否可用的功能?

下面是實際的警告信息的軌道是給我

棄用警告:以下選項在調查:: Participant.has_one:original_participant聲明中棄用::條件。請改用示波器模塊。例如,以下內容:

has_many :spam_comments, conditions: { spam: true }, class_name: 'Comment' 

應該被改寫爲以下幾點:

has_many :spam_comments, -> { where spam: true }, class_name: 'Comment' 
+0

您可以發佈確切的警告信息? – Agis

+0

當然可以在問題結束時發佈。 – wallerjake

回答

2

試試這個,

has_one :original_participant, 
    ->(record) { 
    unless record.respond_to?(:organization_id) 
     where("original_participants_surveys_participants.organization_id = surveys_participants.organization_id") 
    else 
     where("surveys_participants.organization_id = #{record.organization_id}") 
    end 
    }, 
    :through => :original_participation, 
    :source => :participants 
+0

偉大的解決方案謝謝! – wallerjake