RJS: Ajaxified select_tag - PullRequest
       8

RJS: Ajaxified select_tag

3 голосов
/ 24 февраля 2009

Поскольку я не получил ожидаемого ответа на мой последний вопрос , я постараюсь упростить и сузить свой вопрос:

Как создать раскрывающееся меню, в котором используется AJAX (без кнопки отправки) для вызова действия show определенного контроллера?

Дается следующее:

Model-Association - это Категории проектов HABTM , поэтому раскрывающееся меню состоит из всех названий категорий.

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

   <!-- placeholder for AJAX dropdown menu -->

   <!-- list of projects related to categories chosen by the select tag -->
   <ul class="projects">
     <% @projects.each do |_project| %>
       <li>
         <%= link_to(_project.name, _project) %>
       </li>
     <% end %>
   </ul>

Контроллер Categories с show-action, который должен быть вызван:

class CategoriesController < ApplicationController
  def show
    # params[:id] should be the choice the user made in the dropdown menu
    @category = Category.find(params[:id])
    @projects = @category.projects.find(:all)

    respond_to do |format|
      format.html # show.html.erb
      format.js   # needed for ajax response?
    end
  end

  def index
    @projects = Category.find(params[:id]).projects.find(:all)
    @category = @project.categories.first

    respond_to do |format|
      format.html # index.html.erb
    end
  end 
end

Маршрут для вызова show-action в контроллере категорий:

category GET    /categories/:id    {:controller=>"categories", :action=>"show"}

Как бы вы это реализовали? Любая помощь очень ценится!

1 Ответ

7 голосов
/ 25 февраля 2009

Как насчет этого:

<% form_for :category, :url => { :action => "show" } do |f| %>
  <%= select_tag :id, options_from_collection_for_select(Category.find(:all), :id, :name),
  { :onchange => "this.form.submit();"} %>
<% end %>

Это вызовет традиционный вызов html, поэтому обновит всю страницу (и ответит на format.html).

Тогда контроллер найдет категорию по представленному [: id]

@category = Category.find(params[:id])
...