1

我有一个表项目,每个项目都有 0 个或更多类别。在我看来,我想显示 0 个项目,直到与每个类别相关联的 JQuery 单击事件——即当用户单击“食物”时,我想显示所有具有食物类别的项目;当用户单击“照片”时,我想同时显示与食物和照片相关的项目。

因此,在 jQuery click 事件中,我定义了一个 ajax 调用:

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

其中“cat”是所选类别的名称(格式为“Food Photography Journal etc”)

在我的 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 回答