0

我正在使用devise_invitable来允许用户邀请。

这是我的用户模型中的内容:

attr_accessor :custom_message

我创建了一个名为invitations_controller.rb 的新控制器,这是我在其中的内容:

class InvitationsController < Devise::InvitationsController
    def create
         User.invite!({email: email}, current_user) do |user|
           user.message = params[:custom_message]
     end
end

这是我的新邀请表中的内容:

<%= t "devise.invitations.new.header" %>

<%= simple_form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :post} do |f| %>

<% resource.class.invite_key_fields.each do |field| -%>
  <%= f.input field  %>
<% end -%>

<%= f.input :custom_message  %>

<%= f.submit t("devise.invitations.new.submit_button") %>
<% end %>

这就是我在邀请邮件中的内容:

<%= @resource.email %>

<%= @resource.custom_message %>

<%= link_to 'Accept this invitation', accept_invitation_url(@resource, :invitation_token => @token) %>

当我输入电子邮件地址和自定义消息并单击发送时,这就是我在日志中看到的内容:

Started POST "/users/invitation" for 127.0.0.1 at 2014-04-15 15:30:18 -0400
Processing by Devise::InvitationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"x4Mb6AkF1GnZ5bHlipBbLh/X/T0zcHkkkxrtkHW7Y0U=",
"user"=>{"email"=>"email@gmail.com", "custom_message"=>"Test message"}, "commit"=>"Send an invitation"}

电子邮件成功发送,我没有看到任何错误,但没有显示自定义消息应该是,自定义消息在收到的电子邮件中是空白的。这是什么原因造成的?我该如何解决?

编辑:我在 custom_message 上收到未经许可的参数错误

这就是我的应用程序控制器中的内容:

before_filter :configure_permitted_parameters, if: :devise_controller?

 protected

  def configure_permitted_parameters
 devise_parameter_sanitizer.for(:accept_invitation) do |u| u.permit(:username,:validate_username,  :password,:password_confirmation, :invitation_token)
devise_parameter_sanitizer.for(:accept_invitation).concat [:custom_message]
 end
 end
4

2 回答 2

2

可能这会奏效。

 User.invite!({email: email, message: params[:user][:custom_message] }, current_user)

如果您遇到Un permitted错误,您应该在其中一个applicationUser控制器中执行类似的操作。

before_filter :configure_permitted_parameters, if: :devise_controller?

def configure_permitted_parameters
    devise_parameter_sanitizer.for(:invite).concat [:custom_message]
end

您还必须编辑邀请邮件,因为您使用custom_message的是没有 value 的属性。您应该使用message,因为您正在向其中分配数据。所以

<%= @resource.custom_message %>

更改为

<%= @resource.message %>
于 2014-04-15T21:17:04.010 回答
1

仔细看看你的日志,它有答案。您的参数值在

params[:user][:custom_message]

不是

params[:custom_message]
于 2014-04-15T22:11:42.237 回答