rails after_create 设计
rails after_create with devise
我的用户模型中有这段代码
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]
如有任何帮助,我们将不胜感激!
after_create
向数据库插入用户数据后执行回调
在您的代码中,name
并未实际插入。
user = User.create(some_attiributes)
user.name #=> "Test name"
user.reload
user.name #=> nil
如果要插入名称属性,请使用 before_create
回调。
它在 insert
之前分配 name 值
更新:
如果用户有 first_name
和 last_name
属性,
before_create :set_user_full_name
def set_user_full_name
self.name = "#{first_name} #{last_name}"
end
但是如果用户没有first_name
和last_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
我的用户模型中有这段代码
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]
如有任何帮助,我们将不胜感激!
after_create
向数据库插入用户数据后执行回调
在您的代码中,name
并未实际插入。
user = User.create(some_attiributes)
user.name #=> "Test name"
user.reload
user.name #=> nil
如果要插入名称属性,请使用 before_create
回调。
它在 insert
更新:
如果用户有 first_name
和 last_name
属性,
before_create :set_user_full_name
def set_user_full_name
self.name = "#{first_name} #{last_name}"
end
但是如果用户没有first_name
和last_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