モデルに 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であっても、userが常に同じものを取得しない限り。また、self.user.nil のような自己プレフィックスを使用してみましたか? など
check_user_id メソッドを実行しても条件が満たされないのはなぜですか? 新しいリードを作成するときにこの関係を設定する最良の方法は何ですか?
リードは Campaign の下に作成されるため、ユーザーの関連付けを正しく設定する必要があります。
c = Campaign.new
l = c.leads.new
l.email = 'test@test.com'
l.save
手伝ってくれてありがとう!