让我先说一下我是一名Java开发人员,但我的团队正在为我们的产品开发一个SSO微服务,因此我正在学习。
目前我已将其设置为在用户将电子邮件输入此表单时发送密码重置确认:
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %>
<%= devise_error_messages! %>
<div class="row">
<div class="medium-12 small-12">
<div class="field">
<%= f.label :email, class: 'field-label' %>
<%= f.email_field :email, autofocus: true %>
</div>
</div>
</div>
<div class="row">
<div class="actions columns medium-12 small-12">
<%= f.submit "Send", id: "send-button" %>
</div>
</div>
<div class="row text-center align-center">
<div class="small-8 small-centered columns">
<br><p id="form-subheading">* For security reasons, we do NOT store your password. We will NEVER send your password via email.</p>
</div>
</div>
<% end %>
它成功通过了class Users::PasswordsController < Devise::PasswordsController
# POST /resource/password
def create
super
end
现在问题是我们需要将以下first_name
和last_name
字段添加到表单中,并在将表单发送到他们的电子邮件之前对User模型进行身份验证,但它完全忽略这些参数。显然,我需要在某处检查,但不知道从哪里开始。
<div class="row">
<div class="medium-5 small-12">
<div class="field">
<%= f.label :first_name, class: 'field-label' %>
<%= f.text_field :first_name %>
</div>
</div>
<div class="medium-6 medium-offset-1 small-12">
<div class="field">
<%= f.label :last_name, class: 'field-label' %>
<%= f.text_field :last_name %>
</div>
</div>
</div>
我知道它们会被发送到后端,因为params[:user]
变量包含信息,如果我在函数中放入byebug
语句。我只是不确定如何验证表单中的新信息。
任何有关为此表单构建自定义字段的帮助都将不胜感激。
答案 0 :(得分:0)
当然,在找了一个小时后我发布了SO,我立即在文档中找到了我需要的内容。
原来我需要:
# config/initializers/devise.rb
config.reset_password_keys = [:email]
并将其更改为
config.reset_password_keys = [:email, :first_name, :last_name]
答案 1 :(得分:0)
在您的用户模型中,您可以验证这些字段。像这样:
validates :first_name, presence: true
validates :last_name, presence: true
发送表单后,在模型中验证它们。如果first_name
和/或last_name
未填写,则会返回到表单。 Read this for more information about rails validations
同样在你的控制器中你必须接受参数(如果你还没有)。
def user_params
params.require(:user).permit(:first_name, :last_name)
end
在您的用户控制器中,您可能已经拥有def user_params
,只需添加first_name
和last_name
即可。
create
函数@user = User.new(user_params)
中,您将@user.first_name
。)