1

それぞれ0個以上のカテゴリを持つプロジェクトのテーブルがあります。私の見解では、各カテゴリに関連付けられたJQueryクリックイベントまで0個のプロジェクトを表示したいと思います。つまり、ユーザーが[Food]をクリックしたときに、カテゴリFoodのすべてのプロジェクトを表示したいと思います。ユーザーが「写真」をクリックすると、食べ物と写真関連のプロジェクトの両方が表示されます。

したがって、jQueryクリックイベントでajax呼び出しを定義します。

params = 'category_name=' + cat;
$.ajax({
  url: "/projects_controller/filter_list",
  data: params
})

ここで、「cat」は選択したカテゴリの名前です(「FoodPhotographyJournalなど」の形式で)

私のprojects_controllerで、filter_listメソッドを開始しました。

def filter_list
    @categories = []
    words = params[:category_name].split(/\W+/)
    words.each { |word| @categories.push(Category.where("name = ?", word))  }
   @projects = ...
end

しかし今、私は立ち往生しています。1)@categoriesのカテゴリのいずれかに関連付けられているすべてのプロジェクトを取得するにはどうすればよいですか?および2)ビューに@projects変数を表示するにはどうすればよいですか?今、私はこのようにすべてを表示します:

<% Project.all.each do |project| %>
              <tr style="display:none" class="project <% project.categories.all.each do |cat| %><%= cat.name %> <% end %>">
                <td><%= project.filename %></td>
                <td><a href='project/<%= project.id %>'><%= project.location %></a>
                <td><% project.categories.all.each do |cat| %><%= cat.name %>, <% end %></td>
            <% end %>
4

2 に答える 2

3

インスタンス変数 $categories、@projects は既にビューで使用できます。したがって、クラス自体@projectにアクセスするのではなく、ビューで使用できます。Project

<% @projects.each do |project| %>
  ...
<% end %>

しかし、モデルを正しく設計していない可能性があります。モデルで正しい関係を確立します。プロジェクトがカテゴリに属している場合、次のように関連付けることができます。

#models/category.rb
class Category < ActiveRecord::Base
 has_many :projects
end

#models/project.rb
class Project < ActiveRecord::Base
  belongs_to :category
end

#controllers/categories_controller.rb
def index
  @categories = Category.all #or use your own query
end

#views/categories/index.erb
<% @categories.each do |category| %>
  # here you can get all projects under this category using 
  # category.projects
<% end %>

注: 私は HAML に慣れているので、ERB 構文が間違っていたらごめんなさい

于 2012-10-05T05:09:09.700 に答える
0

コントローラに対応するビューは、クラス レベルのインスタンス変数(つまり)classにアクセスできます。@my_variable

コントローラー@projects = Project.all.eachを入れて、ビューでに置き換えるだけです。Project.all@projects

于 2012-10-05T05:10:37.953 に答える