2009-02-23 3 views
3

Поскольку я не получил ожидаемый ответ на моем last question я постараюсь упростить и сузить вопрос:RJS: Ajaxified select_tag

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

следующие вещи Дано:

Model-Ассоциация является Категории 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> 

Категории контроллер с шоу-действия, которые следует назвать:

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"} 

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

ответ

7

Как об этом:

<% 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]) 
+0

Nice один! Спасибо, я никогда не думал о том, чтобы создать традиционный html-вызов, используя javascript. Какая ценность будет иметь: категория и что будет: id? Разве это не имело бы такой же ценности? – Javier

+0

Это не нужно, но тогда вы должны использовать select_tag, я обновил свой ответ, чтобы показать, как это сделать. – Chap