Подтвердить что ты не робот

Обновлять тег select динамически с помощью ajax в рельсах

У меня есть два раскрывающихся списка в представлении, и я пытаюсь обновить второй вариант раскрывающегося списка на основе выбранного значения из первого раскрывающегося списка.

Я знаю Railscasts по этой теме, но я не хочу использовать сгруппированные коллекции; Причины этого в первую очередь состоят в том, что пользователь может выбирать из одного раскрывающегося списка или другого, и результаты фильтруются соответствующим образом, второй раскрывающийся список только фильтрует свои параметры, когда выбрано значение из первого раскрывающегося списка.

Мой вопрос в том, как я могу повторно заполнить опции select_tag из файла js.erb?

форма

  <%= 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 %>

Итак, последняя часть, очевидно, совершенно неверна, но это концепция того, что я пытаюсь сделать. Каков правильный способ сделать это? Я открыт для переделки, если это необходимо, любая помощь приветствуется.

4b9b3361

Ответ 1

Добавьте 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 %>

Ответ 2

Ve ответ в порядке, но если вы хотите добавить параметры в поле выбора, как приглашение или include_blank? как мы можем этого достичь?