15

我在一个视图中有两个下拉列表,我正在尝试根据第一个下拉列表中的选定值更新第二个下拉选项。

我知道有关此主题的 Railscast,但我不想使用分组集合;这样做的原因主要是用户可以从一个下拉列表或另一个下拉列表中进行选择,并且相应地过滤结果,第二个下拉列表在选择第一个下拉列表中的值时过滤其选项。

我的问题是,如何从 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 %>

所以最后一部分显然是完全错误的,但这就是我想要做的概念。实现此目的的正确方法是什么?如果需要,我愿意重做这个,任何帮助表示赞赏。

4

1 回答 1

24

添加escape_javascript到转义运营商退货、由 . 生成的单引号和双引号options_from_collection_for_select

除了添加对escape_javascript. 请在您的js.erb中尝试以下操作:

<% if @filterProducts  %>
    $('#product_id').html("<%= escape_javascript options_from_collection_for_select(@products, :id, :name) %>");
<% end %>
于 2013-07-10T15:51:31.340 回答