RJS: Ajaxified select_tag
Поскольку я не получил ожидаемого ответа на свой последний вопрос, я постараюсь упростить и сузить свой вопрос:
Как я могу создать раскрывающееся меню, которое использует AJAX (без кнопки отправки) для вызова действия show определенного контроллера?
Даны следующие вещи:
Ассоциация моделей - это Категории HABTM Projects , поэтому раскрывающееся меню состоит из всех названий категорий.
Часть представления, в которой должно быть реализовано раскрывающееся меню. Ниже раскрывающегося меню находится список проектов, которые должны измениться в соответствии с выбором, сделанным в раскрывающемся меню:
<!-- 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>
Контроллер категорий с вызываемым действием show:
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
Маршрут назвать шоу-действия в контроллере Категории:
category GET /categories/:id {:controller=>"categories", :action=>"show"}
Как бы вы это реализовали? Любая помощь очень ценится!
Ответов (1)1
Как насчет этого:
<% 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])