[英]How to pass parameters from html.erb to a different html.erb
我正在使用Rails 4中的Messenger Messenger。
我有一个节点图,我希望能够在按下某个节点时调出一个消息框(最初在另一个页面中,但稍后将使其变成部分),以便当前用户可以向该节点发送消息。
单击的节点的ID保留在一个名为NameID
的div中
目前,我要做的只是一个按钮,它会打开新的消息页面,然后您可以从下拉列表中选择一个用户。 我想我要从索引页面上当前单击的节点中预填充该下拉列表-收件人。
这是我到目前为止的内容:
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
helpers / 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
messages / 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 %>
基本上有两种方法可以将参数传递给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
一样使用它们users?id=5
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.