ここで初心者の問題があります:)
アイテムに 1 つのメイン カテゴリ (完了) と 1 つまたは複数のサブカテゴリを設定したいと考えています。メイン カテゴリ用とサブカテゴリ用の 2 つのモデルがあります。新しいアイテムを作成するときに、サブカテゴリのチェックボックスを動的に変更できるようにしたいと考えています。
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);
})
}
});