簡體   English   中英

使用強參數自定義設計

[英]Customizing Devise with Strong Parameters

我正在使用Rails 4.0.0和Devise 3.0.2並嘗試在Devise README中按照此指令配置具有強參數的Devise。

我在application_controller.rb編寫了這樣的代碼

class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :nick
  end
end

然后我訪問了http://localhost:3000/users/sign_up NoMethodError in Devise::RegistrationsController#new得到了NoMethodError in Devise::RegistrationsController#new ,它說:

undefined方法<<' for {}:ActionController::Parameters

並指向我寫的devise_parameter_sanitizer.for(:sign_up) << :nick的確切行

有什么我做錯了嗎? 謝謝你的幫助。

嘗試:

    class ApplicationController < ActionController::Base
      ...
      before_filter :configure_permitted_parameters, if: :devise_controller?   
      ...
      def configure_permitted_parameters
         devise_parameter_sanitizer.for(:sign_up) { |u| 
            u.permit(:email, :password, :password_confirmation, :nick) 
         }
      end

這個對我有用! :d

正如Jose Valim所說 ,它是Devise 3.1.0.rc功能,這就是為什么它不起作用。 您必須使用README中的其他語法。

一個問題完全符合您的問題: #2574:devise_parameter_sanitizer.for(:sign_up)<<:出現錯誤

事實上,將自定義字段添加到強參數中的方法就是Devise 3.1的新功能。

由於Rubygems.org中的當前版本是3.0.3 ,因此您暫時不能在rails項目中使用此方法。 你必須覆蓋這樣的默認值:

devise_parameter_sanitizer.for(:sign_up) do |u|
    u.permit :email, :password, :password_confirmation, :first_name, :last_name
end


但是如果你真的需要,你可以編輯你的Gemfile並替換這一行

gem 'devise', '3.0.3'

這一個:

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

然后,您可以輕松添加自定義字段:

# Single field
devise_parameter_sanitizer.for(:account_update) << :first_name
# Multiple fields at a time
devise_parameter_sanitizer.for(:account_update) << [:first_name, :last_name]

但請注意 ,目前這是一個候選版本3.1.0 RC1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM