2013-08-21 147 views
0

我想在我的模型中有一個before_create方法,它將檢查模型是否與另一個模型(用戶)有關聯/關係,並在關係爲零。在創建/保存模型記錄之前設置關聯ID

問題是,我不知道爲什麼下面的條件不會被執行,儘管用戶和user_id變量爲零。

的關係是:

User has_many :Leads 
Campaign has_many :Leads 
Lead belongs_to :User and :Campaign 

這裏的型號導線代碼:

class Lead < ActiveRecord::Base 
    attr_accessible :email 

    belongs_to :popup 
    belongs_to :campaign 


    validates :email, presence: true, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i } 

    before_create :check_user_id 

private 
    def check_user_id 
    puts "check user id: #{user_id}" 
    puts self.user_id 
    puts user_id 
    puts user 
    if self.user.blank? 
     "set user id" 
     user_id = campaign.user_id if campaign 
    end 

    end 

end 

的問題是,self.user.blank?條件永遠不會被滿足。如果我嘗試user.nil?或者除非用戶我總是得到相同的東西,即使user_id和用戶都是零。我也嘗試使用self.user.nil這樣的自我前綴?等等。

雖然執行check_user_id方法,但爲什麼條件永遠不會滿足? 創建新潛在客戶時,設置此關係的最佳方式是什麼?

牽頭下創建活動,使用戶協會應正確設置:

c = Campaign.new 
l = c.leads.new 
l.email = '[email protected]' 
l.save 

感謝您的幫助!

回答

1

您需要使用self才能正常工作。

def check_user_id 
    # snip... 
    if self.user.blank? 
     user_id = campaign.user_id if campaign 
    end 
    end 

這是告訴方法check_user_id創建名爲user_id一個局部變量。相反,您需要分配instance.user_id

self.user_id = campaign.user_id if campaign 

有關說明,請參閱this answer

+0

謝謝你的答案..它現在的工作!有沒有更好的方法來自動設置關係分配?也許是:通過設置模型關係? – Aljaz

+0

您的代碼非常短的版本是:'self.user_id || = campaign.try(:user_id)'(一行) – MrYoshiji

相關問題