Devise_invitable app / views / devise / invitation.html.erb' registration'字段RoR

时间:2016-08-01 18:03:58

标签: ruby-on-rails devise devise-invitable

我确定那里有人做过这件事。我开始了它,但是我让我的应用程序崩溃了几次,所以我想我只是问那里而不是继续驱动我的webapp被遗忘。我正在使用devise_invitable gem。它会向受邀用户发送链接,他们会点击该链接,然后他们会定向到此视图@ app / views / devise / invitation.html.erb:

<h2><%= t 'devise.invitations.edit.header' %></h2>

<%= simple_form_for resource, as: resource_name, url: invitation_path(resource_name), html: { method: :put } do |f| %>
<%= devise_error_messages! %>
<%= f.hidden_field :invitation_token %>

<%= f.input :password %>
<%= f.input :password_confirmation %>

<%= f.button :submit, t("devise.invitations.edit.submit_button") %>
<% end %>

我想添加一些字段,例如

<%= f.input :firstname %>

但是,当我这样做时, 会出现在视图中,尽管它没有保存到用户模型。所以,我想我需要修改控制器。这让我感到困惑,我想是因为我试图在设计和设计不可避免的自述文件之间来回徘徊。我使用了devise 3.5.6和devise_invitable 1.5.5。我尝试将上面的输入添加到表单,并将应用程序控制器更改为包含

 before_action :configure_permitted_parameters, if: :devise_controller?

 protected

 def configure_permitted_parameters
   devise_parameter_sanitizer.for(:sign_up) << :firstname
 end

但仍然没有保存到我的用户模型。有人有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您允许params传递RegistrationsController create行动。您可以在定义中看到它,params清洁剂用于:sign_up
devise_parameter_sanitizer.for(:sign_up) << :firstname

在您的情况下,它必须是:accept_invitation,因为您使用的是devise_invitable,表单提交网址是welcome_path,它将提交给Devise::InvitationsController#update

devise_parameter_sanitizer.for(:accept_invitation) do |u|
    u.permit(:firstname)
end

更多详情here