如何将自定义字段添加到 Devise-invitable

How do i add custom fields to Devise-invitable

提问人:morris menanya 提问时间:8/7/2023 最后编辑:morris menanya 更新时间:8/10/2023 访问量:58

问:

我已经生成了视图,我还编辑了 users/invitations/new.html.erb 中生成的视图,以包含我想包括名字和姓氏的字段rails generate devise_invitable:views


<%= 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>
    <div class="field">
      <%= f.label field %><br />
      <%= f.text_field :fist_name %>
    </div>
    <div class="field">
      <%= f.label field %><br />
      <%= f.text_field :last_name %>
    </div>
  <% end -%>

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

我已将这行代码添加到文件中 # devise_for :users, controllers: { invitations: 'users/invitations' }routes.rb

我创建了一个控制器来继承 Devise 控制器

class Users::InvitationsController < Devise::InvitationsController
    def update
      if some_condition
        redirect_to root_path
      else
        super
      end
    end

    def create
        
    end

    def new
        
    end
  end

然而,当我去邀请时,我只得到电子邮件字段。请问我如何制作自定义字段?new_user_invitation_path

Ruby-on-Rails 设计 邀请

评论


答:

0赞 RodneyH 8/10/2023 #1

假设您已将 and 字段添加到用户的表中。first_namelast_name

允许自定义字段:

在您的 中,允许在接受邀请时使用自定义字段。application_controller.rb

def configure_permitted_parameters
  devise_parameter_sanitizer.permit :accept_invitation, keys: [:first_name, :last_name, :email]
end

此步骤可确保在用户接受邀请时允许使用自定义字段和此处的输入代码。:first_name:last_name

邀请控制器:

在你的添加一个钩子来调用。invitations_controller.rbbefore_actionconfigure_permitted_parameters

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

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:invite, keys: [:first_name, :last_name])
  end
end

在控制器中,我们允许自定义字段和邀请用户时。这可确保在发送邀请时接受表单中输入的值。:first_name:last_name

邀请说明电子邮件模板:

在模板中包括受邀用户的名字和姓氏。invitation_instructions.html.erb

<p>
  <strong><%= t("devise.mailer.invitation_instructions.first_name") %>:</strong> <%= @resource.first_name %> 
  <strong><%= t("devise.mailer.invitation_instructions.last_name") %>:</strong> <%= @resource.last_name %>
</p>

--> 如果您已经有一些用户邮件,请跳过此操作

用户模型:定义一个名为 eg 的回调。创建新用户后,会自动触发此回调方法。after_createsend_admin_mail

class User < ApplicationRecord
  after_create :send_admin_mail

  def send_admin_mail
    SomeMailer.welcome_email(self).deliver_later
  end
end

在send_admin_mail方法中,发送后,您调用向新注册的用户发送欢迎电子邮件。这里,指的是触发回调的用户实例。UserMailer.welcome_email(self).deliverselfafter_create

通过调用 ,将用户实例传递给类中的方法,然后该方法使用用户的信息来构造和发送个性化的欢迎电子邮件。UserMailer.welcome_email(self)welcome_emailUserMailer

用户邮件:假设您有一些邮件程序在工作,它定义了一个用于向用户发送电子邮件的电子邮件模板。确保您使用的是邮件程序的基类,如以下示例所示:app/mailers/some_mailer.rbApplicationMailer

class SomeMailer < ApplicationMailer
  def welcome_email(user)
    @user = user
    @url  = "https://sitename.com/"

    subject = "Welcome, #{@user.first_name} #{@user.last_name}"
    mail(to: @user.email, subject: subject)
  end
end

--> 跳过结束

若要测试向用户发送邀请,请使用 invite!class 方法。

rails c

User.invite!(email: '[email protected]', name: 'John Doe')
# => an invitation email will be sent to [email protected]

如果您安装并设置了 letter_opener_web Gem,则在发送电子邮件后,模板将自动在您的浏览器界面中打开。

如果您遇到上述问题,请查看 Devise Invitable