2013-07-10 12 views
11

ビューに2つのドロップダウンがあり、最初のドロップダウンから選択した値に基づいて2番目のドロップダウンオプションを更新しようとしています。レールでajaxで選択タグを動的に更新

私はこのトピックのRailscastを知っていますが、私はグループ化されたコレクションを使用したくありません。これは主にユーザーが1つのドロップダウンまたは他のドロップダウンから選択でき、それに応じて結果がフィルタリングされ、2番目のドロップダウンは最初のドロップダウンからの値が選択されたときにそのオプションをフィルタリングします。

私の質問は、js.erbファイルからselect_tagオプションをどのように再設定できますか?

形態

<%= form_tag("filter", :id => "filter_form", :method => "post") do %> 
     <label for="company_id" class="company">Company</label><%= select_tag(:company_id, options_from_collection_for_select(Company.all.order(:name), :id, :name), :prompt => "All Companies") %> 
     <label for="product_id" class="product">Product</label><%= select_tag(:product_id, options_from_collection_for_select(Product.all.order(:name), :id, :name), :prompt => "All Products") %> 
    <% end %> 

js.coffee

$('#company_id').change(-> 
    sendFilterForm() 
) 

sendFilterForm = -> 
    $.get($('#filter_form').attr('action'), $('#filter_form').serialize(), 'script') 

コントローラ

@filterProducts = true 
@products = Product.where(company_id: params[:company_id]).order(:name) 

js.erb

<% if @filterProducts %> 
    $('#product_id').html(<%= options_from_collection_for_select(@products, :id, :name) %>); 
<% end %> 

だから、最後の部分は明らかに非常に間違っているが、それは私が何をしようとしています何の概念です。これを達成する適切な方法は何ですか?私はこれを再加工するために開いている、必要に応じて、任意のヘルプが評価されます。

+0

:あなたのjs.erbに次のようにしてみてください?多分Rails 4のために? –

答えて

18

によって生成される一重引用符と二重引用符をエスケープするには、escape_javascriptを追加します。

escape_javascriptへの電話の追加以外の問題はありません。あなたはこれでGitHubのリポジトリを持っていますか

<% if @filterProducts %> 
    $('#product_id').html("<%= escape_javascript options_from_collection_for_select(@products, :id, :name) %>"); 
<% end %> 
+1

うわー。どのように私はそれを見落としましたか:-)また、html()内の埋め込みルビ呼び出しを引用符で囲む必要がありました。ありがとう! – Drew

+0

@Drew、はい、そこには、引用符を追加して私の答えを更新しました。 – vee

+0

これにgithubリポジトリがありますか?多分Rails 4のために? –

関連する問題