2013-08-21 47 views
0

我有兩個型號:不開火模式after_create回調與創建nested_attributes_for

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 

在控制器中提交模型由after_create回調不點火的用戶模型

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

創建提交模式。

我怎樣才能得到這個回調的工作?

+0

請嘗試'after_save',而不是'after_create' –

回答

3

您對Submission類中定義的after_create回調。我想你希望在表單中設置提交屬性來「創建」一個新的提交。

不過看在控制器代碼:

@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 
0

請嘗試after_save代替after_create

class Submission  
    belongs_to :user 

    after_save :send_confirmation 

    def send_confirmation 
    UserMailer.confirm_submission(self) 
    end 
    end 

感謝