1

選択された祖先の宝石を使用して動的選択を探しています。誰かが以前にこれを行ったことを願っています。

約 2000 (カテゴリ、サブカテゴリ、およびキーワード) があり、すべて STI にあり、ツリー構造になっています。私のフォームでは、カテゴリに 3 つの選択入力を使用しています | サブカテゴリ | キーワードですが、サブカテゴリの膨大なリストとさらに大きなキーワードのリストを取得します。事前に選択されたカテゴリの子ではないすべてのサブカテゴリを非表示にしたい。キーワードと同じ。

うまくいけば、これは意味があり、私がやろうとしていることです. どんなアイデアでも大歓迎です。

これまでのところ、このコードはすべてうまく機能しています。

class Company < ActiveRecord::Base
has_and_belongs_to_many :categories, :join_table => "companies_categories"
has_and_belongs_to_many :subcategories, :join_table => "companies_subcategories"
has_and_belongs_to_many :keywords, :join_table => "companies_keywords"
end

class Category < ActiveRecord::Base
has_ancestry  :cache_depth => true, :depth_cache_column => :ancestry_depth

has_many :subcategories, :class_name => "Category", :foreign_key => :subcategory_id
has_many :keywords, :class_name => "Category", :foreign_key => :keyword_id

belongs_to :category

has_and_belongs_to_many :companies, :join_table => "companies_categories"
has_and_belongs_to_many :companies, :join_table => "companies_subcategories", :association_foreign_key => "subcategory_id"
has_and_belongs_to_many :companies, :join_table => "companies_keywords", :association_foreign_key => "keyword_id"

end  

ここにJavaScriptがあります

jQuery(function($){
$(".chosen-input").chosen();
$(".schosen-input").chosen();
$(".kchosen-input").chosen();
});    

これが私のフォームです

form :html => { :enctype => "multipart/form-data" }  do |f|
f.inputs "New Company" do
  f.input :name,  :required => true
end

f.inputs "Categories" do

  f.input :categories,
          :input_html => { :class => "chosen-input", :multiple => true, :style => "width: 700px;"},
          :collection => Category.where(:ancestry_depth => '2')


  f.input :subcategories,
          :input_html => { :class => "schosen-input", :multiple => true, :style => "width: 700px;"},
          :collection => Category.where(:ancestry_depth => '3')


  f.input :keywords,
          :input_html => { :class => "schosen-input", :multiple => true, :style => "width: 700px;"},
          :collection => Category.where(:ancestry_depth => [4, 5, 6])

end
4

1 に答える 1

1

私はselect2を使用していますが、chopedでも可能だと思います。したがって、ajax リクエストを使用する必要があります。サーバー側でカテゴリ ID (選択したカテゴリの ID) を取得するアクションを定義し、選択したカテゴリ ID の子であるカテゴリのコレクション (json 形式) を返します。次に、クライアント側 (jquery または javasciprt を使用) で、select 入力に json オブジェクトを入力する必要があります。

使用できる JQuery イベント: http://api.jquery.com/change/

選択入力を移入: jQuery -- json からの選択を移入

また、ActiveAdmin では、DOM に基づいて選択入力を決定する必要があります。

于 2014-05-30T20:03:13.610 に答える