在邀请时无法获得devise_invitable来分配角色

时间:2015-04-13 23:03:43

标签: ruby-on-rails devise devise-invitable

我在我的应用程序中使用了devise和devise_invitable。当我向用户发送邀请时,我也想为他们分配一个角色。我通过迁移向我的users表添加了一个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仍为零(它没有设置)。

如果我在configure_permitted_pa​​rameters的开头和结尾添加一些日志记录,那么该方法内部没有任何失败。在完成之后,我在服务器输出中看到了这个:未允许的参数:role_id。

我错过了什么!?

2 个答案:

答案 0 :(得分:2)

尝试将:role_id参数添加到邀请操作:

devise_parameter_sanitizer.for(:invite) << :role_id

https://github.com/scambra/devise_invitable#strong-parameters

答案 1 :(得分:0)

有同样的问题并且这样解决了:

如果您想在视图中将表单设置为已发送的角色,则只需向您添加invitations_controller.rb

private
  def invite_resource
      resource_class.invite!(invite_params, current_inviter) do |invitable|
      invitable.update!(role: invite_params[:role]) #setting role
    end
  end
  def invite_params
    params.require(:user).permit(:name, :email,:invitation_token, :role) #overriding params
  end