2

:name 入力フィールドを edit.html.erb フォームに追加しようとしています。このフォームは、デバイスの招待を受け入れた後にユーザーに送信されます。

ただし、フォームに記入した後、 :name 入力フィールドは空白です (データベースに保存されていません)。

これは、Rails 4 が強力なパラメーターを使用しているために発生しますか?

私はしばらくこれを整理しようとしてきましたが、どこにも行けないようです。

よろしくお願いします。

4

4 に答える 4

4

これについては、devise_invitable の github リポジトリに wiki ページが書かれています

その記事では、彼らは

  1. サブクラスDevise::InvitationsController
  2. オーバーライドupdate
  3. a を入れ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アクションに対してそれを行いましたが、コントローラーをオーバーライドせずに機能しました。

于 2014-06-28T19:43:02.897 に答える
1

これが上記の問題に対する私の解決策です。

devise_parameter_sanitizer.sanitize(:accept_invitation) do |u|
  u.permit(:first_name, :last_name, :invitation_token)
end

私の場合は、 と を許可first_namelast_nameました。最も重要なことは、許可invitation_tokenしないと、アプリケーションでエラーが発生することmissing tokenです。

参考までに、Rails (4.2)、devise (3.4.1)、devise_invitable (1.4.1) でテスト済み

于 2015-03-24T22:11:16.823 に答える
0

ええ、最初にカスタマイズされた属性を許可する必要があります。あなたの場合は:name. devise git hub repoで明確に言及されています

于 2013-11-08T05:42:53.860 に答える