设计不可用的自定义消息 - rails

时间:2014-04-15 20:09:52

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

我正在使用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

2 个答案:

答案 0 :(得分: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属性没有任何价值。您应该使用message,因为您要将数据分配到其中。所以

<%= @resource.custom_message %>

更改为

<%= @resource.message %>

答案 1 :(得分:1)

仔细查看您的日志,它有答案。您的参数值位于

params[:user][:custom_message]

params[:custom_message]