私は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」を使用すると言われましたが、サーバーログに「許可されていないパラメーター」エラーが常に表示されました。
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
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
このようにすべてのparameters
でconfig/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