我正在尝试将精彩的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
答案 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对象,则可能需要更改按钮。