我有一个测试应用程序,允许用户创建帖子,然后其他用户可以评论这些帖子。我现在正在尝试为用户创建一种从帖子中向另一个用户发送消息的方式,但是我遇到了表单问题。当用户 B 想要在用户 A 的帖子中 PM 用户 A 时,我希望消息的表单具有预填充数据。IE。
收件人:@user.username 发件人:@current_user.username
由于消息是它们自己的模型和控制器,我似乎无法重定向用户并仍然保留该用户的特定信息。
我有一个测试应用程序,允许用户创建帖子,然后其他用户可以评论这些帖子。我现在正在尝试为用户创建一种从帖子中向另一个用户发送消息的方式,但是我遇到了表单问题。当用户 B 想要在用户 A 的帖子中 PM 用户 A 时,我希望消息的表单具有预填充数据。IE。
收件人:@user.username 发件人:@current_user.username
由于消息是它们自己的模型和控制器,我似乎无法重定向用户并仍然保留该用户的特定信息。
你不能只在帖子的显示表格上填写表格吗?然后将表单值传递给您的消息创建操作?
./app/controllers/message_controller.rb
class MessageController < ApplicationController
def create
@message = Message.create(create_message_params)
@message.send
end
private
def create_message_params
{}.tap do |h|
h[:from_user_id] = params[:from_user_id]
h[:to_user_id] = params[:to_user_id]
h[:text] = params[:text]
end
end
end
./app/controllers/post_controller.rb
class PostController < ApplicationController
def show
@post = Post.find(params[:id])
@message = Message.new
end
end
./app/views/posts/show.html.erb
<!-- omitting other post show html, showing just the message form -->
<% form_for(@message, url: messages_path do |f| %>
<%= hidden_field_tag(:to_user_id, @post.author.id ) %>
<%= text_area_tag(:text, @message.text) %>
<br/>
<%= f.submit("Send Message") %>
<% end %>
从评论中编辑 2013.08.25,希望消息处于不同的视图中
首先,您将在 Post 的“显示”视图中有一个链接:
<%= link_to "Send a message", new_messages_path(to_user_id: @post.author.id) %>
然后你必须创建新的动作和一个视图,它接收传入的to_user_id
,并将其存储在一个隐藏字段中,也许。然后,当他们message_path
通过提交该消息表单发布到该消息时,您将拥有to_user_id
、 和消息,以及 current_user.id。
那有意义吗?