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であっても、userが常に同じものを取得しない限り。また、self.user.nil のような自己プレフィックスを使用してみましたか? など

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 に答える