如何将参数从html.erb传递到不同的html.erb

时间:2015-07-11 12:03:26

标签: ruby-on-rails

我正在使用导轨4中的信使宝石。

我有一个节点图,我希望能够在按下某个节点时显示一个消息框(最初在不同的页面中,但稍后会使其成为部分),以便当前用户可以向该节点发送消息。

单击节点的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

助手/ 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 %>

1 个答案:

答案 0 :(得分:0)

基本上有两种方法可以将参数传递给GET路由:

甲。命名段

/users/:user_id/message/new

如果您向单个用户发送消息,则此嵌套路由会很棒。

B中。查询参数

Rails也支持查询参数:

/message/new?to=2

Rails会自动将查询参数添加到params哈希。所以在这种情况下你会做params[:to]

您可以使用Rails路由助手,这样您就不必自己处理编码网址了:

new_message_path(to: @user.id)

将查询参数用于可选参数,例如过滤器和排序,或者在本例中为预设。不要像users?id=5那样使用它们。