gpt4 book ai didi

ruby-on-rails - 我如何邀请用户(使用 devise_invitable)并在邀请过程中填充其他字段?

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:06 25 4
gpt4 key购买 nike

例如,当我转到 users/invitations/new , 唯一的字段是 :email .我想邀请一位用户,除了提供他们的电子邮件外,还提供:

  • 名字
  • 姓氏
  • 角色
  • 公司 ( user belongs_to company )

我创建了 Users::InvitationsController < Devise::InvitationsController :

class Users::InvitationsController < Devise::InvitationsController
private
def resource_params
params.permit(user: [:email, :invitation_token, :role, :company_id])[:user]
end
end

然后我将这些字段添加到 users/invitations/new .邀请发送正常,但当我接受它并输入密码时,我的验证失败并显示 No role is selected (验证的 b/c)。

如何在发送邀请之前设置这些字段,并在接受邀请后保留并保存这些字段?谢谢!

最佳答案

rails 5

这是我使用 accepts_nested_attributes_for 的解决方案。如果您的自定义属性直接位于用户模型上,您应该能够将 profile_attributes: [:first_name, :last_name] 替换为 :first_name, :last_name, :role, :company.

这是我的 Controller 。

class InvitationsController < Devise::InvitationsController
before_action :update_sanitized_params, only: :update

# PUT /resource/invitation
def update
respond_to do |format|
format.js do
invitation_token = Devise.token_generator.digest(resource_class, :invitation_token, update_resource_params[:invitation_token])
self.resource = resource_class.where(invitation_token: invitation_token).first
resource.skip_password = true
resource.update_attributes update_resource_params.except(:invitation_token)
end
format.html do
super
end
end
end


protected

def update_sanitized_params
devise_parameter_sanitizer.permit(:accept_invitation, keys: [:password, :password_confirmation, :invitation_token, profile_attributes: [:first_name, :last_name]])
end
end

在我的表单中

<%= f.fields_for :profile do |p| %>
<div class="form-group">
<%= p.label :first_name, class: 'sr-only' %>
<%= p.text_field :first_name, autofocus: true, class: 'form-control', placeholder: 'First name' %>
</div>

<div class="form-group">
<%= p.label :last_name, class: 'sr-only' %>
<%= p.text_field :last_name, class: 'form-control', placeholder: 'Last name' %>
</div>
<% end %>

在 user.rb 我有

...
accepts_nested_attributes_for :profile, reject_if: proc { |attributes| attributes[:first_name].blank? }

关于ruby-on-rails - 我如何邀请用户(使用 devise_invitable)并在邀请过程中填充其他字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29173955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com