使用Rails中的form_tag将多个参数传递到当前页面

时间:2015-03-30 15:22:22

标签: ruby-on-rails forms

我想使用form_tag在当前页面的网址中传递几个参数,但我无法理解正确的语法。

快速解释:我的服装(型号)有很多outfit_items(型号) 每个outfit_item都有available_sizes(outfit_item的属性)。所有这些都是由管理员设置的。

然后在Outfit的显示页面上(例如http://localhost:3000/outfits/7)我想显示每个outfit_item的可用尺寸,让访问者为每个项目选择他的尺寸并按提交。然后,所选尺寸应显示在URL中。 以下是我在节目视图中的内容:url:

<%= form_tag(@outfit_path, :method=>'post') do %>
    <% @outfit.outfit_items.each do |outfit_item| %>
        <div class="col-md-2 col-sm-6 col-xs-6">
            <%= image_tag outfit_item.item_image.url(:medium) %><br>
            <% sizes = outfit_item.available_sizes.split(",") %>
            <%= select_tag "size#{outfit_item.category}", "<option>#{sizes[1]}</option><option>#{sizes[2]}</option><option>#{sizes[3]}</option><option>#{sizes[4]}</option>".html_safe, :class => "input-mini select-mini" %><br>
            <%= hidden_field_tag "size#{outfit_item.category}", value: outfit_item.category %>
        </div>
    <% end %>
            <%= submit_tag "ok size"  %>
<% end %>

当我点击提交

时,我想登陆此网址
http://localhost:3000/outfits/7?size1=42&size2=L&size3=S&size4=44

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

你可以这样做。希望它有所帮助。

<%= form_tag(@outfit_path, url: your_path(size1: value1, size2: value2, ......)  :method=>'post') do %>

答案 1 :(得分:0)

我会这样做:

<%= form_tag(outfit_path(@outfit), :method=>'get') do %>
  <% @outfit.outfit_items.each do |outfit_item| %>
      <div class="col-md-2 col-sm-6 col-xs-6">
          <%= image_tag outfit_item.item_image.url(:medium) %><br>
          <% sizes = outfit_item.available_sizes.split(",") %>
          <%= select_tag "size#{outfit_item.category}", options_for_select(sizes), :class => "input-mini select-mini" %><br>
          <%= hidden_field_tag "size#{outfit_item.category}", value: outfit_item.category %>
      </div>
  <% end %>
  <%= submit_tag "ok size"  %>
<% end %>

一些假设:

注意:

  • outfits_path(@outfit)通常(来自惯例)是"/outfits/<outfit id>",所以这就是我在这里使用的 - 这就是我对会议的期望
  • 如果你想登陆网址,即公开,你应该把它作为GET请求,而不是发布请求。所以我已经改变了表格以提出GET请求
  • 你那里有一个hidden_​​field_tag。这将显示在 您的网址也是如此,因此您无法获得所需的确切网址 并在那里有隐藏的字段标记。
  • options_for_select(sizes)是一种生成大量选项标签的更好方法
  • 我觉得有一种更好的方法来做你在这里尝试做的事情,但是如果不了解你的架构,我就不能说什么了。