提问人:morris menanya 提问时间:8/7/2023 最后编辑:morris menanya 更新时间:8/10/2023 访问量:58
如何将自定义字段添加到 Devise-invitable
How do i add custom fields to Devise-invitable
问:
我已经生成了视图,我还编辑了 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
答:
假设您已将 and 字段添加到用户的表中。first_name
last_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.rb
before_action
configure_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_create
send_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).deliver
self
after_create
通过调用 ,将用户实例传递给类中的方法,然后该方法使用用户的信息来构造和发送个性化的欢迎电子邮件。UserMailer.welcome_email(self)
welcome_email
UserMailer
用户邮件:假设您有一些邮件程序在工作,它定义了一个用于向用户发送电子邮件的电子邮件模板。确保您使用的是邮件程序的基类,如以下示例所示:app/mailers/some_mailer.rb
ApplicationMailer
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。
评论