0

我想在我的模型中有一个 before_create 方法,它将检查模型是否与另一个模型(用户)有关联/关系,并设置它以防关系为零。

问题是我不知道为什么以下条件不会被执行,尽管 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 之类的 self 前缀?, ETC。

为什么尽管执行了 check_user_id 方法,但条件从未满足?当我创建新潜在客户时,设置这种关系的最佳方式是什么?

潜在客户是在 Campaign 下创建的,因此应正确设置用户关联:

c = Campaign.new
l = c.leads.new
l.email = 'test@test.com'
l.save

感谢帮助!

4

1 回答 1

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

请参阅此答案以获取解释。

于 2013-08-21T13:27:05.783 回答