0

我正在尝试在我的 Rails 应用程序中实现出色的 Mailboxer gem。我想在用户个人资料页面上包含一个按钮,该按钮加载表单以向该用户发送私人消息。我尝试使用此问题中发布的代码作为指南,但没有任何运气: Rails mailinger gem, send message to user using form

单击用户页面上的按钮将加载私人消息表单。但是,单击该表单上的发送按钮会显示以下错误:

ActiveRecord::RecordNotFound in MessagesController#create Couldn't find User without an ID

这是相关的代码。我将在代码示例下方发表我的想法:

消息控制器

class MessagesController < ApplicationController
  def index
  end

# GET /message/new
  def new
  @user = User.find(params[:user])
  @message = current_user.messages.new
    # display form
  end

  # POST /message/create
  def create
    @user = User.find(params[:user])
    @message = current_user.connections.build(params[:message])
    #current_user.send_message(@user, params[:body], params[:subject])
  end
end

new.html.erb(消息视图 - 新)

<%= form_for(@message) do |f| %>
            <div>Subject
            <%= f.text_field :subject %></div>
            <div>Message
            <%= f.text_area :body%></div>
             <%= f.hidden_field(:user, :value => @user.id) %>
            <p><%= f.submit 'Send message'%></p>
        <% end %>

Mailboxer 文档建议 current_user.send_message(@user, params[:body], params[:subject])在 create 函数中使用(我注释掉了),但是我无法在“new”函数中将我通过 GET 获得的用户带过来。我正在尝试使用新功能将其发送到创建功能,但我完全卡住了。为什么我当前的创建函数无法从新函数中找到用户 ID?

作为参考,这里是 gem 文档的链接: https ://github.com/ging/mailboxer

谢谢!

编辑:用户个人资料页面上的按钮代码

<%= button_to "Send a message", new_message_path(:user => @user) %>

相关路线

resources :messages do
    member do
      post :reply
      post :trash
      post :untrash
      post :new
    end
4

1 回答 1

1

您需要将电子邮件按钮链接到new_message_path(@user.id)用户个人资料页面上。

它可能看起来像@userin /message/new 没有从数据库中设置,因为它没有params[:user]正确索引的变量。

您的路线应如下所示:

resources :messages do
  collection do
    post 'new/:user', 'messages#create', as 'new_message_for_user'
  end
  member do
    ..
  end
end

然后你的按钮看起来像:

= button_to 'Send a message', new_message_for_user(@user), method: :post

我确信我的一些偏好已经显现出来,但是有一些 Rails-Way 感觉就像你在跳过。此外,如果您覆盖了 User 对象,则可能需要更改按钮。

于 2013-12-09T01:38:41.687 回答