我这里有一个新手问题:)
我希望我的项目有一个主要类别(完成)和一个或多个子类别。我有两个模型 - 一个用于主要类别,一个用于子类别。创建新项目时,我希望能够动态更改子类别的复选框。
我几乎已经用 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);
})
}
});