2

我已经升级到 Rails 4 并选择了 strong_parameters 路线。问题是它抛出了指向我用于设计的客户注册控制器的以下错误:

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 创建允许的参数类的方法:

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

我不确定如何在注册控制器中处理这个问题。

4

2 回答 2

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 更新后的“捆绑安装”。

于 2013-05-16T14:38:46.460 回答
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
于 2013-05-15T19:36:26.237 回答