アプリケーションでdeviseとdevise_invitableを使用しています。ユーザーに招待状を送信するときに、役割も割り当てたいと考えています。移行によってユーザー テーブルに role_id を追加し、許可されたロールを含む Role モデルを作成しました。devise と devise_invitable のドキュメントにあるいくつかのアドバイスを使用して、アプリケーション コントローラーにいくつかのコードを追加しました。
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :role_id
devise_parameter_sanitizer.for(:accept_invitation) << :role_id
devise_parameter_sanitizer.for(:sign_in) << :role_id
devise_parameter_sanitizer.for(:account_update) << :role_id
end
end
ビューでは、私はこれを持っています:
<%= simple_form_for(User.new, url: user_invitation_path,
html: { class: 'form-inline' }) do |f| %>
<%= f.input :email, placeholder: 'Email', label: false %>
<%= f.collection_select :role_id, Role.all, :id, :name, {} %>
<%= f.button :submit, 'Invite User', class: 'btn-primary' %>
<% end %>
アドレスを入力して役割を選択して新しいユーザーを作成するたびに、role_id はまだ nil のままです (設定されません)。
configure_permitted_parameters の最初と最後にログを追加すると、そのメソッド内で何も失敗しません。ただし、終了した直後に、サーバー出力に次のように表示されます。 Unpermitted parameter: role_id.
何が足りないの!?