2016-05-20 13 views
74

Tôi đang làm việc với Rails 5Rails 5, Phương thức chưa xác định `cho 'cho # <Phát triển trên dòng devise_parameter_sanitizer.for

Tôi đã đăng nhập tên người dùng trường mới trong Người dùng mô hình.

class Users::RegistrationsController < Devise::RegistrationsController 
    before_action :configure_permitted_parameters 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up).push(:username) 
    end 
end 

Khi đăng ký được hiển thị lỗi: phương thức chưa xác định `for 'for # Ý của bạn là gì? Fork

Trace:

NoMethodError (phương pháp xác định 'cho' cho # Ý của bạn là ngã ba?):

app/controllers/users/registrations_controller.rb:7:in `configure_permitted_parameters' 
    Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout 
    Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb 
    Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.0ms) 
    Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb 
    Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.9ms) 
    Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb 
    Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.2ms) 
    Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (118.1ms) 

Ai có thể giúp đỡ? Làm thế nào giải quyết vấn đề này?

+1

Nó xảy ra on Rails 4.2 cũng . – sekrett

Trả lời

129

According to the documentation:

The Parameter Sanitaizer API has changed for Devise 4

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

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) 
    end 
end 
+0

vì một số lý do này hoạt động nhưng khi tôi khởi động lại đường ray, nó sẽ ngừng hoạt động trở lại – K2xL

+0

@ K2xL Xóa thùng rác của bạn? Rất tiếc, tháng 10 của nó. Làm thế nào bạn sửa lỗi này? – snowYetis

+0

dừng + khởi động lại mùa xuân, pehaps – phillyslick

2

Đừng quên devise_parameter_sanitizer.permit(:account_update, keys: [:username])

+1

Anh ta không quên, anh ta cần chuyển sang cú pháp mới. – sekrett

24

Nếu bạn chỉ cần thay đổi .for-.permit nó hoạt động là tốt. Ví dụ:

devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :username) } 

Nó hoạt động trong cả hai Rails 4.2.x và 5.0.x Rails

-1
class ApplicationController < ActionController::Base 

    before_action :configure_permitted_paramters, if: :devise_controller? 

    protected 
    def configure_permitted_paramters 

     devise_parameter_sanitizer.permit(:sign_up, keys: [:fullname]) 

     devise_parameter_sanitizer.permit(:account_update, keys: [:fullname, 
     :phone_number, :description, :email, :password]) 

    end 

end 
-1

Ngoài ra, sử dụng lập mưu đá quý phiên bản 4.1:

gem 'devise', '~> 4.1.0' 
Các vấn đề liên quan