【发布时间】:2013-09-15 18:06:22
【问题描述】:
我使用的是clearance gem,基本上是通过电子邮件进行身份验证。
现在我想通过电子邮件保持登录,但想在用户的注册表单中添加一个“姓名”字段。
用户.rb
class User < ActiveRecord::Base
include Clearance::User
validates_presence_of :name
validates_uniqueness_of :name
end
users_controller.rb
class UsersController < Clearance::UsersController
def create
@user = user_from_params
if @user.save(permit_params)
sign_in @user
render :json => {:success => true}
else
render :json => {:success => false}
end
end
private
def user_from_params
user_params = params[:user] || Hash.new
email = user_params.delete(:email)
password = user_params.delete(:password)
Clearance.configuration.user_model.new(user_params).tap do |user|
user.email = email
user.password = password
end
end
def permit_params
params.require(:user).permit(:name, :email, :encrypted_password, :password, :confirmation_token, :remember_token)
end
end
如您所见,我向.save 添加了权限,但该应用仍应请求向我抛出以下错误:
ActiveModel::ForbiddenAttributesError in Clearance::UsersController#create
如果我从表单中删除 :name 文本字段,一切正常,但我想要表单的其他字段。
【问题讨论】:
-
我没有看到您所显示的内容有什么问题。你能显示 db/schema.rb 吗?您是否已将 :name 列迁移到数据库中?
-
如果
permit_params不在.new(...)语句中,例如Clearance.configuration.user_model.new(permit_params).tap....
标签: ruby-on-rails ruby-on-rails-4 strong-parameters clearance