基于Rails中复选框条件的条件隐藏标记

时间:2017-06-30 21:56:42

标签: ruby-on-rails

如何根据是否选中复选框发送隐藏代码?

我有一个表格,其中包含产品标题和产品价格以及每行的复选框选择以及表格提交我想将这两个值发送给控制器。我只能通过一个复选框获得一个值,所以我添加了一个隐藏的标记字段,但是,这个隐藏的标记将提交每一行,这不是我想要的。在下面的params发送示例中,它应该有两个项目和两个价格发送,但它会发送每一行的所有价格。 (顺便说一句,如果有更好的方法在不使用隐藏标签的情况下发送两个参数,请告诉我!)

这是来自Google Analytics分析API报告请求FYI =>

的数据
@product_revenue.reports[0].data.rows
p.dimensions[0] = "Product Title"
p.metrics[0].values[0] = "Product Price"

结构来自here

Table Image

查看代码:

<div class="col-md-6">
  <%= form_tag add_multiple_path, method: :post do %>
  <table>
    <thead>
      <th><strong>Product Title</strong></th>
      <th><strong>Product Price</strong></th>
      <th><strong>Add?</strong></th>
    </thead>
    <% @product_revenue.reports[0].data.rows.each do |p| %>
      <tr>
        <td><%= p.dimensions[0] %></td>
        <td><%= p.metrics[0].values[0] %></td>
        <td>
          <%= check_box_tag 'price_test_datum[product_title][]', p.dimensions[0] %>
          <%= hidden_field_tag('price_test_datum[product_price][]', p.metrics[0].values[0]) %>
        </td> 
      </tr>
    <% end %>
  </table>
  <%= submit_tag "Add selected" %>
  <% end %>
</div>

隐藏字段是转储所有列值而不是与该行关联的列值?

发送的参数:

{
  "utf8"=>"✓", 
  "authenticity_token"=>"token here", 
  "price_test_datum"=>{
    "product_price"=>["29.98", "14.99", "14.99", "14.99", "14.99", "14.99", "299.95", "35.97", "21.98", "10.99", "33.98", "27.98", "13.99", "59.99", "29.98", "59.98", "29.99", "110.93", "4088.79"], 
    "product_title"=>["Turquoise Bracelets", "Red Bracelets"]
  }, 
  "commit"=>"Add selected"
}

1 个答案:

答案 0 :(得分:0)

所以我在表循环中添加了一个索引,并使用复选框值将相关的行值(索引)提交给控制器。然后,我使用隐藏标记字段将所有产品标题和价格值作为数组发送到控制器,并使用行键查找相关值。这似乎是一个不优雅的解决方案,但它确实有效。

<%= form_tag add_multiple_path, method: :post do %>
<table>
  <thead>
    <th><strong>Product Title</strong></th>
    <th><strong>Product Price</strong></th>
    <th><strong>Add?</strong></th>
  </thead>
  <% @product_revenue.reports[0].data.rows.each_with_index do |p, index| %>
    <tr>
      <td><%= p.dimensions[0] %></td>
      <td><%= p.metrics[0].values[0] %></td>
      <td>
        <%= check_box_tag 'row[]', index %>
        <%= hidden_field_tag 'price_test_datum[product_title][]', p.dimensions[0] %>
        <%= hidden_field_tag 'price_test_datum[product_price][]', p.metrics[0].values[0] %>
      </td> 
    </tr>
  <% end %>
</table>

控制器代码

def add_multiple
params[:row].each do |r|
  PriceTestDatum.create(product_title: params[:price_test_datum][:product_title][r.to_i],
                        product_price: params[:price_test_datum][:product_price][r.to_i])
end
respond_to do |format|
  format.html { redirect_to price_test_data_path }
  format.json { head :no_content }
end
end