0

我有两个模型:

class User
  has_many :submissions

  accepts_nested_attributes_for :submissions, :allow_destroy => true
end

class Submission
  belongs_to :user

  after_create :send_confirmation

  def send_confirmation
    UserMailer.confirm_submission(self)
  end
end

在控制器中,提交模型由用户模型创建

def create
  @user = User.where(:email => user_params[:email]).first_or_create
  @user.update_attributes(user_params)
end

未为提交模型触发 after_create 回调。

我怎样才能让这个回调工作?

4

2 回答 2

3

您已经在该类上定义了一个after_create回调。Submission我猜你希望在表单中设置提交属性来“创建”一个新的提交。

但是看看控制器中的代码:

@user = User.where(:email => user_params[:email]).first_or_create
@user.update_attributes(user_params)

这是你正在做的事情:

  1. User如果没有找到就新建一个
  2. 更新用户的实例user_params

假设user_params包含您的提交属性,您不是在“创建”而是“更新”实例。

您需要定义一个after_updateafter_save回调:

class Submission
  belongs_to :user

  after_save :send_confirmation

  def send_confirmation
    UserMailer.confirm_submission(self)
  end
end
于 2013-08-21T10:27:05.360 回答
0

请尝试after_save代替after_create

 class Submission    
  belongs_to :user

  after_save :send_confirmation

   def send_confirmation
    UserMailer.confirm_submission(self)
   end  
  end

谢谢

于 2013-08-21T10:25:50.563 回答