我已经升级到Rails 4并且已经走了strong_parameters路线。问题是,它正在抛出以下错误,指向我正在使用Devise的客户注册控制器:
ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError):
app/controllers/users/registrations_controller.rb:89:in `build_resource'
app/controllers/users/registrations_controller.rb:6:in `create'
第6行从build_resource
方法调用create
,build_resource是库存标准:
def build_resource(hash=nil)
hash ||= resource_params || {}
self.resource = resource_class.new_with_session(hash, session)
end
它正在处理的模型是User
。我尝试过Ryan Bates创建一个允许的params类的方法:
class PermittedParams < Struct.new(:params, :current_user)
def user
params.require(:user).permit(*user_attributes)
end
def user_attributes
[:name, :username, :provider, :email, :remember_me,
:rememberable_token, :password, :password_confirmation]
end
我不确定如何在注册控制器中处理这个问题。
答案 0 :(得分:3)
Devise刚刚发布了一个与Rails 4兼容的新rc gem。
gem 'devise', '~> 3.0.0.rc'
其他选项,你可以使用devise master github repo中的'rails4'分支。
gem 'devise', github: 'plataformatec/devise', branch: 'rails4'
当然,在Gemfile更新后不要忘记'bundle install'。
答案 1 :(得分:1)
我发现你必须将它添加到注册控制器:
class Users::RegistrationsController < Devise::RegistrationsController
def resource_params
params.require(:user).permit(:name, :email, :password, :password_confirmation) # And whatever other params you need
end
private :resource_params
end