我希望在我的模型中有一个before_create方法,它将检查模型是否与另一个模型(用户)有关联/关系,并在关系为nil时设置它。
问题是我不知道为什么不会执行以下条件,尽管user和user_id变量都是nil。
关系是:
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和user是nil。我也试过像self.user.nil一样使用自己的前缀?等等。
尽管执行了check_user_id方法,为什么永远不会满足条件? 在创建新线索时设置此关系的最佳方法是什么?
在Campaign下创建潜在客户,因此应正确设置用户关联:
c = Campaign.new
l = c.leads.new
l.email = 'test@test.com'
l.save
感谢您的帮助!
答案 0 :(得分: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以获取解释。