用设计跟踪after_create

时间:2016-01-09 11:50:46

标签: ruby-on-rails devise after-create

我的用户模型中有此代码

class User < ActiveRecord::Base
  after_create :set_user_full_name
  .........
private

  def set_user_full_name
    self.name = "Test name"
  end
end

但是当我创建用户时,name属性为nil。我尝试将名称添加到

创建并更新强大的参数,但没有运气。

devise_parameter_sanitizer.for(:sign_up) << [:name]
devise_parameter_sanitizer.for(:account_update) << [:name]

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

在db。中插入用户数据后执行

after_create回调。

在您的代码中,实际上并未插入name

user = User.create(some_attiributes)
user.name     #=> "Test name"

user.reload
user.name     #=> nil

如果要插入名称属性,请使用before_create回调 它在插入

之前指定名称值

<强>更新

如果用户具有first_namelast_name属性,

before_create :set_user_full_name

def set_user_full_name
    self.name = "#{first_name} #{last_name}"
end

但是如果用户没有first_namelast_name属性,则应该在控制器中处理。

class Users::RegistrationsController < Devise::RegistrationsController
  before_filter :set_name_param, only: [:create]

  private
  def set_name_param
    params[:user][:name] = "#{params[:user][:first_name]} #{params[:user][:last_name]}"
  end
end