Rails 5, #에 대한 정의되지 않은 메소드`for '
Rails 5를 사용하고 있습니다.
모델 사용자에 새 필드 사용자 이름을 추가했습니다.
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
등록하는 동안 오류가 표시됩니다 : 정의되지 않은 방법 'for'for # 의미 했습니까? 포크
자취:
NoMethodError (# Fork에 대한 정의되지 않은 메소드 'for') :
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)
누가 도울 수 있습니까? 이 문제를 어떻게 해결합니까?
According to the documentation:
Devise 4의 Parameter Sanitaizer API가 변경되었습니다.
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
방금 변경하는 경우 .for
에 .permit
그것은뿐만 아니라 작동합니다. 예를 들면 :
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :username) }
Rails 4.2.x와 Rails 5.0.x에서 모두 작동합니다.
잊지 마세요 devise_parameter_sanitizer.permit(:account_update, keys: [:username])
컨트롤러의 configure_permitted_parameters 메소드에서 account_update를 놓친 것 같습니다. 고안 패턴을 따라야합니다. Devise에는 계정 업데이트 페이지가 있습니다. views / devise / registrations / edit.html.erb에서 찾을 수 있으며 코드는 sign_up 페이지에서도 작동하지 않습니다. 여기서 sign_up 페이지를 지정했습니다.
사용자 테이블을 업데이트하려면 사용자 / 편집에서 업데이트를 제출하는 순간 또는 sign_up 페이지에서 사용자 이름을 제출하는 경우이 고안 패턴을 따라 데이터베이스 사용자 테이블을 업데이트해야합니다. 사용자 테이블에 새 열을 추가 한 경우에도 configure_permitted_parameters 메서드에 추가해야합니다. 귀하의 경우에는 사용자 이름이지만 account_update도 놓쳤습니다. 기본적으로 Devise 패턴을 따르지 않고 사용자 이름을 업데이트하거나 사용자 이름 필드에 문자열을 추가하고 싶다고 말합니다. User 테이블에 추가하는 모든 필드는이 Devise 패턴을 따라야합니다. 또한이 사용자 이름을 업데이트 할 수있는 페이지를 지정할 수 있습니다. 아래 예제에서는 devise 업데이트 페이지를 사용하고 있습니다. 앞서 말했듯이 사용자 테이블에 사용자 정의 필드 이름을 추가 한 경우에도이 패턴을 따라야합니다.
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])
devise_parameter_sanitizer.permit(:account_update, keys: [:username])
end
end
Next make sure in your user.rb you have validate username in your User model.
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :username, presence: true
end
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
Rails 5를 사용하고 있습니다.
모델 사용자에 새 필드 사용자 이름을 추가했습니다.
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
등록하는 동안 오류가 표시됩니다 : 정의되지 않은 방법 'for'for # 의미 했습니까? 포크
자취:
NoMethodError (# Fork에 대한 정의되지 않은 메소드 'for') :
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)
누가 도울 수 있습니까? 이 문제를 어떻게 해결합니까?
According to the documentation:
Devise 4의 Parameter Sanitaizer API가 변경되었습니다.
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
방금 변경하는 경우 .for
에 .permit
그것은뿐만 아니라 작동합니다. 예를 들면 :
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :username) }
Rails 4.2.x와 Rails 5.0.x에서 모두 작동합니다.
잊지 마세요 devise_parameter_sanitizer.permit(:account_update, keys: [:username])
컨트롤러의 configure_permitted_parameters 메소드에서 account_update를 놓친 것 같습니다. 고안 패턴을 따라야합니다. Devise에는 계정 업데이트 페이지가 있습니다. views / devise / registrations / edit.html.erb에서 찾을 수 있으며 코드는 sign_up 페이지에서도 작동하지 않습니다. 여기서 sign_up 페이지를 지정했습니다.
사용자 테이블을 업데이트하려면 사용자 / 편집에서 업데이트를 제출하는 순간 또는 sign_up 페이지에서 사용자 이름을 제출하는 경우이 고안 패턴을 따라 데이터베이스 사용자 테이블을 업데이트해야합니다. 사용자 테이블에 새 열을 추가 한 경우에도 configure_permitted_parameters 메서드에 추가해야합니다. 귀하의 경우에는 사용자 이름이지만 account_update도 놓쳤습니다. 기본적으로 Devise 패턴을 따르지 않고 사용자 이름을 업데이트하거나 사용자 이름 필드에 문자열을 추가하고 싶다고 말합니다. User 테이블에 추가하는 모든 필드는이 Devise 패턴을 따라야합니다. 또한이 사용자 이름을 업데이트 할 수있는 페이지를 지정할 수 있습니다. 아래 예제에서는 devise 업데이트 페이지를 사용하고 있습니다. 앞서 말했듯이 사용자 테이블에 사용자 정의 필드 이름을 추가 한 경우에도이 패턴을 따라야합니다.
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])
devise_parameter_sanitizer.permit(:account_update, keys: [:username])
end
end
Next make sure in your user.rb you have validate username in your User model.
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :username, presence: true
end
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
'Programing' 카테고리의 다른 글
익명 함수를 정의하고 jQuery를 인수로 전달하는 이유는 무엇입니까? (0) | 2020.09.01 |
---|---|
passport.js를 사용하여 node.js에서 인증 후 이전 페이지로 리디렉션 (0) | 2020.09.01 |
Expression.Quote ()는 Expression.Constant ()가 할 수없는 일을 무엇입니까? (0) | 2020.09.01 |
사이트의 IIS Express 포트를 어떻게 변경할 수 있습니까? (0) | 2020.09.01 |
신속한 "전제 조건"과 "어설 션"의 차이점은 무엇입니까? (0) | 2020.09.01 |