【问题标题】:Implementing Mailboxer gem in Rails app. ActiveRecord::RecordNotFound在 Rails 应用程序中实现 Mailboxer gem。 ActiveRecord::RecordNotFound
【发布时间】:2013-12-08 23:13:31
【问题描述】:

我正在尝试在我的 Rails 应用程序中实现出色的 Mailboxer gem。我想在用户个人资料页面上包含一个按钮,该按钮加载表单以向该用户发送私人消息。我尝试使用此问题中发布的代码作为指南,但没有任何运气: 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])(我注释掉了)在 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

【问题讨论】:

    标签: ruby-on-rails ruby activerecord mailboxer


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复!我忘记发布用户个人资料页面上的按钮代码。我有一些类似于你发布的内容:&lt;%= button_to "Send a message", new_message_path(:user =&gt; @user) %&gt;
    • 我开始认为问题出在消息/新页面上的提交按钮上。当我单击提交按钮时,出现错误时,我的浏览器 URL 栏中的 URL 是 http://localhost:3000/messages 。不应该去 /messages/create 吗?
    • 嘿@james,我已经更新了我的答案,希望能纠正你试图做的一些事情。如果您仍需要帮助,请告诉我
    • 感谢您的更新!我必须跑去上班,但我可以尝试一些事情。由于错误,我不得不更改路线 - 它缺少 to: 关键字。 new_message_for_user 方法不存在,所以我坚持使用现有的 new_message_path。有问题的路线是post 'new/:user', to: 'messages#create。当我单击用户页面上的按钮时,URL 看起来像 http://localhost:3000/messages/new.3 并带有 Active Record 错误 Couldn't find User without an ID。今晚下班回来我会多玩它。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多