【问题标题】:RJS: Ajaxified select_tagRJS:Ajaxified select_tag
【发布时间】:2010-10-09 10:54:28
【问题描述】:

由于我的last question 没有得到预期的答案,我将尝试简化和缩小我的问题:

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

给出以下几点:

Model-AssociationCategories 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

在 Categories 控制器中调用 show-action 的 路由

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

您将如何实现这一点?非常感谢任何帮助!

【问题讨论】:

    标签: javascript ruby-on-rails ruby rjs


    【解决方案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])
    

    【讨论】:

    • 不错的一个!谢谢,我从来没有想过使用 javascript 进行传统的 html 调用。什么值将具有 :category 以及什么值将具有 :id?那不是有相同的价值吗?
    • 没必要,但是你必须使用 select_tag,我已经更新了我的答案来说明如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多