1

ここで初心者の問題があります:)

アイテムに 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);
  })
}
});
4

1 に答える 1

0

フォームを送信するとページが更新されるため、チェックボックスは確実にクリアされます。

この時点で、次の 2 つのことを行うことができます。

  1. クライアント側でフォームの検証を行います。したがって、無効なフォームを送信することはありません。
  2. render "new"または、チェックされたサブカテゴリ (params から取得) を含む前に、コントローラに別のグローバル リストを作成し ます。何かのようなもの :

    @checked_subcategories = params[:sub_categories]
    

    そして、if @checked_subcategories.include?(name)チェックボックスをチェック済みとしてマークするなど、繰り返しながらビューをチェックインできます。

于 2012-11-18T14:53:57.050 に答える