как связать выпадающие списки в форме рельсов - PullRequest
3 голосов
/ 11 февраля 2010

Как я могу связать выпадающие списки на странице рельсов. оба раскрывающихся списка будут поступать из базы данных.

Например,

Если первый выпадающий список - category (таблица category). второй выпадающий список, products, также поступающий из дБ, будет заполнен на основе выбора первого выпадающего списка?

Ответы [ 2 ]

3 голосов
/ 11 февраля 2010

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

<%= collection_select(:category, :some_category_method_name, 
    Category.all, :id, :category_name, 
    {:prompt => 'Select'},
    { :onchange =>  remote_function(:url => {:action => 'get_products'}, 
    :with => "'id=' + this.value")}) 
%>
<div id='product_dropdown'></div>

Таким образом, в основном то, что делает приведенный выше код, генерируя раскрывающийся список для категории и изменяя выбранное значение из этого раскрывающегося списка, отправляет запрос к действию 'get_products' с идентификатором выбранной категории. Затем в этом методе вы можете получить все товары этой категории и обновить элемент product_dropdown новым партиалом, в котором есть выпадающий список товаров.

 def get_products
   @category = Category.find(params[:id)
   render :update do |page|
     page.replace_html 'product_dropdown', 
          :partial => 'partial_name_in_which_you_have_product_drop_down',
          :locals => {:products => @category.products}

   end
 end

Надеюсь, это поможет вам начать.

Если вы не уверены, как работает collection_select, тогда вот документы

0 голосов
/ 11 февраля 2010

Проще всего использовать один виджет Javascript, который будет предоставлять многоуровневое меню.

Вот о ne от YUI. Я уверен, что есть другие, основанные на других инструментах.

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