在Rails应用程序中实现Mailboxer gem。的ActiveRecord :: RecordNotFound

时间:2013-12-08 23:13:31

标签: ruby-on-rails ruby activerecord mailboxer

我正在尝试将精彩的Mailboxer gem应用到我的Rails应用程序中。我想在用户个人资料页面上添加一个按钮,用于加载表单以向该用户发送私人消息。我尝试使用此问题中发布的代码作为指导而没有任何运气: Rails mailboxer 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])(我注释掉了)但后来我无法将我在“新”函数中使用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

1 个答案:

答案 0 :(得分:1)

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

可能看起来未在数据库中设置/ message / new中的@user,因为它没有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对象,则可能需要更改按钮。