在Rails 4中的strong_parameters gem和自定义设计路由

时间:2013-05-15 19:30:05

标签: ruby-on-rails ruby-on-rails-4 strong-parameters

我已经升级到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

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

2 个答案:

答案 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