Rails-зависимые поля collection_select в форме - PullRequest
5 голосов
/ 15 марта 2011

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

Когда выбрана категория, я хочу, чтобы группы в этой категории заполняли второй раскрывающийся список (и то жевещь между группой и участником).

У меня есть следующая форма (очевидно, это не работает так, как мне хотелось бы, поскольку я беру все предметы для конкретной модели) ...

<div class="field">
<%= f.collection_select(:category, Category.find(:all), :id, :name, {:include_blank => 'Category'}) %>
</div>
<div class="field">
<%= f.collection_select(:group, Group.find(:all), :id, :name, {:include_blank => 'Group'}) %>
</div>
<div class="field">
<%= f.collection_select(:member, Member.find(:all), :id, :name, {:include_blank => 'Member'}) %>
</div>
<div class="actions">
<%= f.submit %>
</div>

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

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

Лучший способ сделать это - AJAX call. В начале просто заполните категорию выпадающим списком. А по смене категории сделайте вызов ajax и заселите группы. И сделайте то же самое для членов группы в раскрывающемся списке.

Попробуйте что-то вроде этого:

$("#category']").click(function(){
  var url = '/get_drop_down_options?category_id=' + $(this).val()
  $("#group").removeOption(/./)
  $.get(url, function(data) {
    $('#group').addOption(data, false);
  });
});

В вашем контроллере:

def get_drop_down_options
  val = params[:category_id]
  #Use val to find records
  options = YourModel.collect{|x| "'#{x.id}' : '#{x.label}'"}    
  render :text => "{#{options.join(",")}}" 
end

Теперь вам не нужно частичное.

0 голосов
/ 15 марта 2011

Я бы имел разные идентификаторы для каждого поля и использовал бы некоторую анимацию jquery и магию ajax: Когда щелкают поле, я выполняю ajax-вызов, чтобы получить все записи подгруппы, как только я получу их, отобразить этот div с анимацией скольжения или подобным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...