我正在开发一个市场应用程序。卖家列出要销售的产品。我想创建一个精选列表小部件。所以我创建了一个管理页面,我可以看到所有列出的项目。然后在管理页面上添加了“精选”复选框,以便我可以选择我想要推荐的项目。
然后我进行了迁移,在我的列表模型中添加'featured'作为布尔字段。
如何在我的管理页面html中插入form_for,以便将复选框值输入为1(或true)到列表模型中?
一旦我获得了模型的复选框值,我就可以将该方法添加到我的控制器中以过滤特色列表。
<div class="center">
<h2>Admin area: All Listings</h2>
</div>
<table class="table table-striped table-bordered">
<tr>
<th>Image</th>
<th>Seller</th>
<th>Name</th>
<th>Price</th>
<th>Featured</th>
<th>Action</th>
</tr>
<% @listings.each do |listing| %>
<tr>
<td><%= image_tag listing.image.url(:thumb) %></td>
<td><%= listing.userid %></td>
<td><%= listing.name %></td>
<td><%= number_to_currency(listing.price) %></td>
<td><%= check_box_tag(:featured) %></td>
<td>
<div class="btn-group">
<button type="button" class="btn btn-primary btn-xs dropdown-toggle" data-toggle="dropdown">
Action <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li><%= link_to "View", listing, class: "btn btn-link" %></li>
<li><%= link_to "Edit", edit_listing_path(listing), class: "btn btn-link" %></li>
<li><%= link_to 'Delete', listing, method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-link" %></li>
</ul>
</div>
</td>
</tr>
<% end %>
</table>
答案 0 :(得分:0)
你可以通过javascript来实现,有很多方法,但是你的形式会有一个简单的解决方案:
<%= f.hidden_field :featured, class: 'hidden' %>
在您的复选框中:
<%= check_box_tag(:featured_checkbox), data: {id: listing.id} %> #or whatever
并以这种方式附加这些值(jquery):
$(function(){
$("input[type=checkbox]").click(function(){
$('.hidden').value($(this).data('id'))
});
});
免责声明:未经测试但应该可以使用。
编辑: 确保在文档就绪时执行jquery代码段。见上文编辑。
如果您需要解析复选框的值,即使数据不存在,也应保存数据,您可以通过Cookie完成。如果保存记录:
<%= check_box_tag(:featured_checkbox), value: listing.featured, data: {id: listing.id} %>
无论如何,理解程序比使这段代码更有效(按原样)。
答案 1 :(得分:0)
通常我会通过JS / jQuery和一个很好的post / get请求回到服务器来实现它,感觉这将是一个更好的UX方法。但是,我也为表单方法添加了一个粗略的想法。
JS方法
$(document).ready(function(){
$("input[type=checkbox]").click(function(){
$.get('/listings/admin/feature_listing/'+$(this).val(), function(data){
alert("Listing has been toggled!");
});
});
});
不要忘记更新您的路线文件。
表单方法
你基本上必须打破一个新的表单,并将:featured属性分开。
<%= form_tag listing_featured_path, method: :get do %>
<td><%= check_box_tag "listing_featured", "Featured", :value=>listing.featured %></td>
<td><%= submit_tag "Submit" %></td>
<% end %>
然后,您需要在控制器中创建一个新的单独操作,以获取该自定义参数并更新路径。