我这里有一个新手问题:)
我希望我的商品有一个主要类别(已完成)和一个或多个子类别。我有两个模型 - 一个用于主要类别,一个用于子类别。在创建新项目时,我希望能够动态更改子类别的复选框。
我几乎已经实现了我想要的jQuery和对显示复选框的视图的请求。我现在唯一的问题是,当我尝试创建一个新项目并且在渲染“新”时我提交了一个无效表单时,已经检查的子类别已经消失。
以下是我的一些代码:
这是来自我的控制器:
def subcategories
@subcategories = Category.find(params[:id]).subcategories
if !params[:item_id].nil?
@item = Item.find(params[:item_id])
else
@item = Item.new
end
render :partial => "subcategories"
end
这是我的观点:
<% if !@subcategories.blank? %>
<% @subcategories.each do |subcat| %>
<%= label_tag dom_id(subcat), subcat.name, :class => "checkbox" do %>
<%= check_box_tag "item[subcategory_ids][]", subcat.id, @item.subcategory_ids.include?(subcat.id) , id: dom_id(subcat) %> <%= subcat.name %>
<% end %>
<% end %>
<% end %>
这是我的new.html.erb:
<div id="subcategories_main">
<%= label_tag "Subcategories" %>
<div id="subcategories">
</div>
</div>
我有这个小JavaScript来显示复选框:
$("#item_category_id").change(function() {
// make a POST call and replace the content
var category_id = $('select#item_category_id :selected').val();
if(category_id != "" || category_id != "0")
{
$.get('/categories/' + category_id + '/subcategories', function(data){
$("#subcategories").html(data);
})
}
});
答案 0 :(得分:0)
表单提交会刷新页面,因此复选框肯定会被清除。
此时你可以做两件事:
或者在包含已检查子类别(来自params)的render "new"
之前在控制器中创建另一个全局列表。类似的东西:
@checked_subcategories = params[:sub_categories]
然后您可以在迭代时检入视图,例如if @checked_subcategories.include?(name)
,将复选框标记为已选中。