3

最後の質問で期待される答えが得られなかったので、質問を単純化して絞り込みます。

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>

呼び出す必要のあるshow-actionを備えたCategoriesコントローラー:

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

これをどのように実装しますか?どんな助けでも大歓迎です!

4

1 に答える 1

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])
于 2009-02-25T15:51:25.860 に答える