2013-08-17 28 views
6

我正在使用Rails 4.0.0和Devise 3.0.2,並嘗試在Devise README中配置設計參數this instruction後面的強參數。自定義具有強參數的設計

我在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,它說:

未定義的方法<<' for {}:ActionController::Parameters

,並在一處地方,我寫devise_parameter_sanitizer.for(:sign_up) << :nick

確切行有什麼我做錯了什麼?謝謝你的幫助。

+0

我試過完全相同的代碼,並得到同樣的錯誤。 'devise_parameter_sanitizer.for(:sign_up)'返回一個空的散列,所以不可能調用'<<'方法。 我已提交[一個問題] [1],你可以關注。 [1]:https://github.com/plataformatec/devise/issues/2574 –

+0

@RafałCieślak謝謝您的確認,我會按照這個問題。 –

回答

4

由於Jose Valim said,它的Devise 3.1.0.rc功能,這就是爲什麼它不起作用。您必須使用README中的其他語法。

5

嘗試:

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

+0

這是否在模型中? –

+0

我把ApplicationController: before_filter:configure_permitted_pa​​rameters,如果:: devise_controller? –

4

一個問題完全符合您的問題:#2574 : devise_parameter_sanitizer.for(:sign_up) << :something raises an error

實際上,將自定義字段添加到強參數中的方法是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' 

然後你c一個輕鬆地添加自定義字段這樣的:

# 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

+0

它總是那些小細節......如果他們在自述文件中提到像我這樣的糟糕的github noobs,那會很好......只有在網絡上嘗試過一些不同的例子才能發揮作用的唯一方法就是將我的attrs放在像卡洛斯這樣的許可團體在上面提到過。 – Danny

相關問題