【问题标题】:strong_parameters gem and custom devise routes in Rails 4Rails 4 中的 strong_parameters gem 和自定义设计路线
【发布时间】:2013-05-15 19:30:05
【问题描述】:

我已经升级到 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 行是从 create 方法调用的 build_resource,并且 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

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

【问题讨论】:

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


    【解决方案1】:

    Devise 刚刚发布了一个与 Rails 4 兼容的新 rc gem。

    gem 'devise', '~> 3.0.0.rc'
    

    其他选项,您可以使用 devise master github repo 中的“rails4”分支。

    gem 'devise', github: 'plataformatec/devise', branch: 'rails4'
    

    当然不要忘记在 Gemfile 更新后进行“捆绑安装”。

    【讨论】:

      【解决方案2】:

      我发现您必须将其添加到注册控制器:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-16
        • 2015-03-24
        • 1970-01-01
        相关资源
        最近更新 更多