繁体   English   中英

如何将参数从html.erb传递到其他html.erb

[英]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路由:

A.命名段

/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一样使用它们users?id=5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM