after_create回调未在使用nested_attributes_for创建的模型上触发

时间:2013-08-21 10:07:31

标签: ruby-on-rails

我有两种模式:

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

在Controller中,提交模型由用户模型

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

没有为Submission模型触发after_create回调。

如何让这个回调起作用?

2 个答案:

答案 0 :(得分:3)

您已在after_create课程中定义了Submission回调。我猜您期望在表单中设置提交属性以“创建”新提交。

但请查看控制器中的代码:

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

这是你在做什么:

  1. 如果找不到则创建新的User
  2. 使用user_params
  3. 更新用户的实例

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

    您需要定义after_updateafter_save回调:

    class Submission
      belongs_to :user
    
      after_save :send_confirmation
    
      def send_confirmation
        UserMailer.confirm_submission(self)
      end
    end
    

答案 1 :(得分:0)

请尝试使用after_save代替after_create

 class Submission    
  belongs_to :user

  after_save :send_confirmation

   def send_confirmation
    UserMailer.confirm_submission(self)
   end  
  end

感谢