簡體   English   中英

"Rails 5,用於#的未定義方法“for”"

[英]Rails 5, Undefined method `for' for #<Devise on line devise_parameter_sanitizer.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

According to the documentation:

Devime 4的參數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_pa​​rameters方法中錯過了account_update,您需要遵循設計模式。 Devise有一個帳戶更新頁面。 你可以在views / devise / registrations / edit.html.erb中找到它,你的代碼也不能在sign_up頁面中工作,在這里你指定了sign_up頁面

要更新用戶表,在用戶/編輯中提交更新的時間,或者如果要在sign_up頁面中提交用戶名,則需要遵循此設計模式,以更新數據庫用戶表。 即使您向用戶表添加了新列,也必須將其添加到configure_permitted_pa​​rameters方法中。 在你的情況下它是用戶名,但你也錯過了account_update。 您基本上是說要更新用戶名或將字符串添加到用戶名字段而不遵循設計模式。 您添加到User表的任何字段都應遵循此Devise模式。 您還可以指定允許哪個頁面更新此用戶名。 在下面的示例中,我正在使用設計更新頁面。 就像我說的那樣,即使您向Users表添加了自定義字段名稱,也需要遵循此模式。 如果你有另一個頁面需要添加用戶名,你就會做同樣的事情。

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

接下來請確保在您的user.rb中您已在用戶模型中驗證用戶名。

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  validates :username, presence: true
end

要更新您的用戶表,您在用戶\/編輯中提交更新的那一刻,或者如果您在注冊頁面中提交用戶名,您需要遵循此設計模式,以更新數據庫用戶表。 即使您向用戶表添加了新列,也必須將其添加到 configure_permitted_pa​​rameters 方法。 在您的情況下,它是用戶名,但您也錯過了 account_update。 您基本上是在說您想要更新用戶名或將字符串添加到用戶名字段而不遵循設計模式。 您添加到 User 表的任何字段都應遵循此設計模式。 您還可以指定允許哪個頁面更新此用戶名。 在下面的示例中,我使用的是設計更新頁面。 所以就像我說的,即使你添加了

"

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

暫無
暫無

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

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