如何为Devise-invitable添加自定义字段?已操作但仅显示邮箱字段
解决Devise Invitable添加自定义字段的问题
1. 修复视图文件错误
你的users/invitations/new.html.erb存在三处关键问题:
- 自定义字段嵌套在
resource.class.invite_key_fields.each循环内,该循环默认仅遍历email字段,导致字段重复渲染且标签错误 :fist_name拼写错误,应为:first_name- 自定义字段的label错误使用循环变量
field(对应email),需替换为各自的字段名
修改后的视图代码:
<%= form_for(resource, as: resource_name, url: invitation_path(resource_name), html: { method: :post }) do |f| %> <%= render "users/shared/error_messages", resource: resource %> <%# 渲染默认邮箱字段 %> <% resource.class.invite_key_fields.each do |field| -%> <div class="field"> <%= f.label field %><br /> <%= f.text_field field %> </div> <% end -%> <%# 添加自定义的first_name和last_name字段 %> <div class="field"> <%= f.label :first_name %><br /> <%= f.text_field :first_name %> </div> <div class="field"> <%= f.label :last_name %><br /> <%= f.text_field :last_name %> </div> <div class="actions"> <%= f.submit t("devise.invitations.new.submit_button") %> </div> <% end %>
2. 启用自定义控制器
取消routes.rb中注释的代码,让Devise使用你自定义的邀请控制器:
devise_for :users, controllers: { invitations: 'users/invitations' }
3. 完善自定义控制器的参数处理
你的Users::InvitationsController中create方法为空,需添加参数允许逻辑,确保自定义字段能被正确接收:
class Users::InvitationsController < Devise::InvitationsController def update if some_condition redirect_to root_path else super end end def create build_resource(invite_params) resource.save respond_with resource, location: after_invite_path_for(resource) end def new super end private def invite_params params.require(:user).permit(:email, :first_name, :last_name) end end
4. 配置User模型支持邀请字段
在app/models/user.rb中,配置Devise Invitable允许传递自定义字段:
class User < ApplicationRecord # 其他devise模块... devise :invitable, invite_fields: [:first_name, :last_name] end
完成以上步骤后重启服务器,访问new_user_invitation_path即可看到包含邮箱、first_name和last_name的完整表单。
内容的提问来源于stack exchange,提问作者morris menanya
相关产品推荐
相关产品推荐

