首页 > 解决方案 > 如何将自定义字段添加到 devise_invitable 邀请表单

问题描述

我需要在使用 devise_invitable 邀请用户时设置用户的角色。我已经阅读了关于如何完成此操作的答案以及文档,但我没有运气。除了一个之外,每一篇文章都过时了。

为什么视图中没有填充角色字段?仅显示电子邮件字段。我需要向我的 application_controller 添加一些东西吗?

路线.rb

Rails.application.routes.draw do
  resources :assignments
  resources :games

  devise_for :users, :controllers => {registrations: 'registrations', invitations: 'users/invitations' }

  root 'main#index'
end

邀请控制器.rb

class Users::InvitationsController < Devise::InvitationsController
    before_action :configure_permitted_parameters

    protected
  
    # Permit the new params here.
    def configure_permitted_parameters
      devise_parameter_sanitizer.permit(:invite, keys: [:email, :role])
    end
end

app/views/devise/invitations/new.html.erb

<h2><%= t "devise.invitations.new.header" %></h2>

<%= simple_form_for(resource, as: resource_name, url: invitation_path(resource_name), html: { method: :post }) do |f| %>
  <%= f.error_notification %>

  <% resource.class.invite_key_fields.each do |field| -%>
    <div class="form-inputs">
      <%= f.input field %>
    </div>
  <% end -%>

  <div class="form-actions">
    <%= f.button :submit, t("devise.invitations.new.submit_button") %>
  </div>
<% end %>

标签: ruby-on-railsformscontrollerdevisedevise-invitable

解决方案


在 user.rb 中添加虚拟属性(attr_accessor: role) 然后你就可以使用它了

class User < ApplicationRecord
    attr_accessor :role   
end 

推荐阅读