jac*_*n09 6 ruby ruby-on-rails devise devise-invitable
例如,当我去时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
Run Code Online (Sandbox Code Playgroud)
我把这些字段添加到了users/invitations/new.邀请发送正常,但是当我接受它并输入密码时,我的验证失败了No role is selected(b/c验证).
如何在发送邀请之前设置这些字段并将其保留并在接受邀请时保存?谢谢!
小智 2
轨道5
这是我使用的解决方案accepts_nested_attributes_for。如果您的自定义属性直接位于用户模型上,您应该能够替换profile_attributes: [:first_name, :last_name]为:first_name, :last_name, :role, :company.
这是我的控制器。
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
Run Code Online (Sandbox Code Playgroud)
在我的表格里面
<%= 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 %>
Run Code Online (Sandbox Code Playgroud)
在 user.rb 中我有
...
accepts_nested_attributes_for :profile, reject_if: proc { |attributes| attributes[:first_name].blank? }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |