Ruby-on-Rails: заполнить поле выбора на основе предыдущего выбора - PullRequest
1 голос
/ 23 августа 2011

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

Аналогичная модель данных будет выглядеть следующим образом ...

Таблицы и поля

  • Блокировка
    • lock_id
    • Brand_ID
    • master_id
    • regular_id
  • Блокировка бренда
    • Brand_ID
  • Мастер Ключ
    • master_id
    • Brand_ID
  • Обычный ключ
    • regular_id
    • Brand_ID

Таким образом, при заполнении формы для добавления нового Замка будут отображаться поля выбора для бренда, мастера и обычного. После выбора бренда он будет ограничивать основные и обычные ключи только теми, которые относятся только к выбранному бренду.

Я нашел несколько частичных примеров того, как это сделать, однако ни один из них не завершен. Буду признателен за полный пример того, как это реализовать.

1 Ответ

3 голосов
/ 23 августа 2011

Все, что вам нужно сделать, это связать селекторы с прослушивателем событий, который запускает запрос ajax, заполняя другие 2 партиала, содержащие последующие селекты.т.е.

<%= form_for @thing, :remote => true do, :update => 'second_form' |f| %>
  <%= hidden_field_tag 'form_partial', :value => 'form_2' %> 
  <%= select_tag :some_param, [[a,a],[b,b],[c,c]] :class => 'submittable' %> 
  <%= f.label :checked %>
  <%= thing.name %>
<% end %>
<div id='second_form'>
</div>
<div id='third_form'>
</div>

class ThingController < ApplicationController
  def update
    checkboxes = some_logic_to_select_checkboxes from params[:some_params]
    render :partial => params[:form_partial], :locals => {:select_menu => select_menu}
  end
end

$('.submittable').live('change', function() {
  $(this).parents('form:first').submit();
  return false;
});

Ваша частичная форма должна содержать ваши формы, заполненные любыми выбранными вариантами, которые вы хотите включить.Мысль была излишней, чтобы просто повторить форму.

...