存储选定的 ID,获取以显示在自定义路由视图中
Posted
技术标签:
【中文标题】存储选定的 ID,获取以显示在自定义路由视图中【英文标题】:Storing selected IDs, fetching to display in a custom routed view 【发布时间】:2013-08-14 22:45:21 【问题描述】:我还是 Rails 的新手,似乎无法理解这一点。
我的表格显示了在表单列中具有多个属性的几个产品。在我的索引视图中,我展示了一个缩短的表格,其中只有一些列。在我的 products#show 中,我讲述了完整的故事,但显然只针对选定的产品。我想要做的是让用户在 products#index 中选择一些产品,然后将选定的 ID 存储在哈希中,将它们发送到另一个视图,我希望将 ID 显示在一个完整的表中,告诉整个故事,一次几个产品。基本上这是为了比较产品。
我不确定如何解决这个问题。因为我已经在使用 DataTables,所以使用 javascript 是有意义的,但我不确定如何使用。和想法?我尝试了几个想法,但没有一个能让我有所收获。
products#index
<table id="products"cellpadding="0" cellspacing="0" border="0" class="table.responsive">
<thead>
<tr>
<th></th>
<th>Product Name</th>
<th>TG</th>
<th>TD</th>
<th>DK</th>
<th>DF</th>
<th>T260</th>
<th>T288</th>
<th>CTI</th>
<th>Strength</th>
<th>Rigidity</th>
<th>Standards</th>
<th>Manufactorer</th>
</tr>
</thead>
<tbody>
<% @products.each do |product| %>
<tr>
<td><%= check_box_tag "product_ids[]", product.id %></td>
<td><%= link_to product.name, product %></td>
<td><%= product.TG %></td>
<td><%= product.TD %></td>
<td><%= product.DK %></td>
<td><%= product.DF %></td>
<td><%= product.T260 %></td>
<td><%= product.T288 %></td>
<td><%= product.CTI %></td>
<td><%= product.ElectricStrength %></td>
<td><%= product.rigidity %></td>
<td><% product.standards.each do |standard| %>
<%= link_to standard.name, standard %>,
<% end %> </td>
<td><%= product.producer %></td>
<% end %>
</tr>
</tbody>
</table>
如果有人能抽出时间为我指出正确的方向,那就太好了!
【问题讨论】:
【参考方案1】:这应该不会太难解决,我将引导您完成我将采取的基本步骤。
我的基本方法是采用上述复选框的形式并将其提交给旨在以所述方式处理它们的操作,如下所示:
创建一条用于所有这些的新路由。查看the docs 中的2.10.2 添加收集路由(假设您正在使用资源)。也许可以称之为“比较”。
使用form not backed by a model 保存您的checkboxes 和labels(每种产品各1 个)- 它应该发布到您的新路线。
在您的控制器中,为您的路线添加操作。此操作应从参数中获取表单传入的 id 并加载相关产品(请记住,find 可以采用 id 数组,因此应该很容易)。
最后,为您的新操作添加一个视图,并使用相关逻辑来呈现您的比较。
您可以轻松地使用 javascript 进行回填,但这不是必需的。老实说,添加一点额外的华丽效果会更有用,比如禁用按钮并显示微调器或其他东西,而不是完整的 javascript 提交,在这种特殊情况下它并不能真正为你买任何东西。
【讨论】:
以上是关于存储选定的 ID,获取以显示在自定义路由视图中的主要内容,如果未能解决你的问题,请参考以下文章
如何从视图中返回选定的 ID,它总是将 id 1 返回到 Flask 路由