【问题标题】:Devise invitable custom message not working - rails设计邀请的自定义消息不起作用 - rails
【发布时间】:2014-04-15 20:09:51
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这可能会奏效。

     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 %>
    

    【讨论】:

    • 它做了完全相同的事情。你能看看我的表格,是这个问题吗?邮件视图有问题吗?
    • 哦,对不起.. 修复了代码。感谢@Thilo 指出。
    • 你在这样做吗devise_parameter_sanitizer.for(:invite).concat [:custom_message]
    • 应该是invite 而不是accept_invitation
    【解决方案2】:

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

    params[:user][:custom_message]
    

    不是

    params[:custom_message]
    

    【讨论】:

    • 我要在邀请控制器中更改这个吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多