web-dev-qa-db-ja.com

RailsおよびDeviseを使用した強力なパラメーター

私はRails 4.0 4.0ブランチと一緒にRuby 2.0.0p0およびRails 4.0.0.beta1。

これは、正しい方法でやっているかどうか、または他にやるべきことがあるかどうかを確認しているような質問です。 Rails 4.0に移行する多くの人々が同じ問題に直面していると確信しています(同様のことをグーグルで調べた後))。

次のリンクを読みました。

今、deviseを使用してUserモデルを作成し、上記の要点を使用して次のコントローラーを作成しました(そして、それをrouteファイルに含めるようにしました)。私の追加パラメーターはfirst_nameとlast_nameです。

class Users::RegistrationsController < Devise::RegistrationsController
  def sign_up_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
  end
  def account_update_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password)
  end
  private :sign_up_params
  private :account_update_params
end

他に何かすべきことはありますか?これが今後の最善の方法ですか(attr_accessorを削除するため)。私のフォームは正常に機能しているようです(新規および更新の両方)。要点では「resource_params」を使用すると言われましたが、サーバーログに「許可されていないパラメーター」エラーが常に表示されました。

54
user1202888

DeviseのRails4ブランチの最新の更新のおかげで、「resource_params」を挿入する必要はありません。

新しいRails4アプリを作成し、基本的なDeviseのインストール手順を実行しましたが、アプリは適切に動作するので、うまくいったと思います。

ただし、必要に応じて、許可されたパラメーターに関する詳細を提供する修正されたGistがあります。

ソース: https://Gist.github.com/bluemont/e304e65e7e15d77d3cb9

# controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController

  before_filter :configure_permitted_parameters

  protected

  # my custom fields are :name, :heard_how
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) do |u|
      u.permit(:name, :heard_how,
        :email, :password, :password_confirmation)
    end
    devise_parameter_sanitizer.for(:account_update) do |u|
      u.permit(:name,
        :email, :password, :password_confirmation, :current_password)
    end
  end
end
66
Zoltan

Rails 5、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: [:first_name, :last_name, :email, :password, :password_confirmation])
  end
end

参照

26
Ronak Jain

このようにすべてのparametersconfig/initializersにモジュールを追加すると、非常にうまく機能します

module DevisePermittedParameters
  extend ActiveSupport::Concern

  included do
    before_filter :configure_permitted_parameters
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) }
  end

end

DeviseController.send :include, DevisePermittedParameters
7
Rokibul Hasan