2009-02-23 43 views
3

因为我没有得到我的last question预期的答案,我会尽量简化,缩小我的问题:RJS:Ajax化select_tag

如何建立使用AJAX下拉菜单(未提交 - 按钮)调用某个控制器的显示操作?

以下的事情给出:

模型协会分类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

尼斯之一!谢谢,我从来没有想过通过使用javascript进行传统的html调用。什么价值将会有:类别和什么将会有:id?这不会有相同的价值吗? – Javier 2009-02-25 17:26:04