我正在使用导轨4中的信使宝石。
我有一个节点图,我希望能够在按下某个节点时显示一个消息框(最初在不同的页面中,但稍后会使其成为部分),以便当前用户可以向该节点发送消息。
单击节点的id保存在名为NameID
目前,我所有工作的按钮都会打开新的消息页面,然后您可以从下拉列表中选择一个用户。我想我希望下拉列表 - 收件人 - 从索引页面上当前点击的节点预先填充。
这是我到目前为止所做的:
index.html.erb
<p><a class="btn btn-lg btn-primary" id="BtnMessageNode" href="/messages/new">Start conversation</a></p>
<div id=NameID><<THIS IS POPULATED BY JAVASCRIPT>></div>
messages_controller.rb
class MessagesController < ApplicationController
before_action :authenticate_user!
def new
@chosen_recipient = User.find_by(id: params[:to].to_i) if params[:to]
end
def create
recipients = User.where(id: params['recipients'])
conversation = current_user.send_message(recipients, params[:message][:body], params[:message][:subject]).conversation
flash[:success] = "Message has been sent!"
redirect_to conversation_path(conversation)
end
end
助手/ messages_helper.rb
module MessagesHelper
def recipients_options(chosen_recipient = nil)
s = ''
User.all.each do |user|
s << "<option value='#{user.id}' data-img-src='#{gravatar_image_url(user.email, size: 50)}' #{'selected' if user == chosen_recipient}>#{user.name}</option>"
end
s.html_safe
end
end
消息/ new.html.erb
<% page_header "Start Conversation" %>
<%= form_tag messages_path, method: :post do %>
<div class="form-group">
<%= label_tag 'message[subject]', 'Subject' %>
<%= text_field_tag 'message[subject]', nil, class: 'form-control', required: true %>
</div>
<div class="form-group">
<%= label_tag 'message[body]', 'Message' %>
<%= text_area_tag 'message[body]', nil, cols: 3, class: 'form-control', required: true %>
</div>
<div class="form-group">
<%= label_tag 'recipients', 'Choose recipients' %>
<%= select_tag 'recipients', recipients_options(@chosen_recipient), multiple: true, class: 'form-control chosen-it' %>
</div>
<%= submit_tag 'Send', class: 'btn btn-primary' %>
<% end %>
答案 0 :(得分:0)
基本上有两种方法可以将参数传递给GET路由:
/users/:user_id/message/new
如果您向单个用户发送消息,则此嵌套路由会很棒。
Rails也支持查询参数:
/message/new?to=2
Rails会自动将查询参数添加到params
哈希。所以在这种情况下你会做params[:to]
。
您可以使用Rails路由助手,这样您就不必自己处理编码网址了:
new_message_path(to: @user.id)
将查询参数用于可选参数,例如过滤器和排序,或者在本例中为预设。不要像users?id=5
那样使用它们。