:name 入力フィールドを edit.html.erb フォームに追加しようとしています。このフォームは、デバイスの招待を受け入れた後にユーザーに送信されます。
ただし、フォームに記入した後、 :name 入力フィールドは空白です (データベースに保存されていません)。
これは、Rails 4 が強力なパラメーターを使用しているために発生しますか?
私はしばらくこれを整理しようとしてきましたが、どこにも行けないようです。
よろしくお願いします。
:name 入力フィールドを edit.html.erb フォームに追加しようとしています。このフォームは、デバイスの招待を受け入れた後にユーザーに送信されます。
ただし、フォームに記入した後、 :name 入力フィールドは空白です (データベースに保存されていません)。
これは、Rails 4 が強力なパラメーターを使用しているために発生しますか?
私はしばらくこれを整理しようとしてきましたが、どこにも行けないようです。
よろしくお願いします。
これについては、devise_invitable の github リポジトリに wiki ページが書かれています
その記事では、彼らは
Devise::InvitationsController
update
before_action
てサニタイズされたパラメータを変更します:accept_invitation
ただし、以下を .xml に入れるだけでは不可能ではないか (そしてもっと簡単に) 疑問に思いますApplicationController
。
class ApplicationController < ActionController::Base
#...
before_action :devise_configure_permitted_parameters, if: :devise_controller?
#...
protected
def devise_configure_permitted_parameters
# Devise 3 (deprecated in Devise 4.0 and removed in Devise 4.2)
# devise_parameter_sanitizer.for(:accept_invitation) << :name
# Devise 4
devise_parameter_sanitizer.permit(:accept_invitation, keys: [:name])
end
私はデバイス:sign_up
と:account_update
アクションに対してそれを行いましたが、コントローラーをオーバーライドせずに機能しました。
これが上記の問題に対する私の解決策です。
devise_parameter_sanitizer.sanitize(:accept_invitation) do |u|
u.permit(:first_name, :last_name, :invitation_token)
end
私の場合は、 と を許可first_name
しlast_name
ました。最も重要なことは、許可invitation_token
しないと、アプリケーションでエラーが発生することmissing token
です。
参考までに、Rails (4.2)、devise (3.4.1)、devise_invitable (1.4.1) でテスト済み
ええ、最初にカスタマイズされた属性を許可する必要があります。あなたの場合は:name. devise git hub repoで明確に言及されています