我有一个表项目每个都有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 %>
答案 0 :(得分:3)
您的实例变量$ categories,@ project已在视图中可用。因此,在视图中,您可以使用@project
而不是访问类Project
本身。
<% @projects.each do |project| %>
...
<% end %>
但可能你没有正确设计模型。在模型中建立正确的relationships。如果项目属于某个类别,您可以按如下方式关联它们:
#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语法错误
答案 1 :(得分:0)
控制器class
的相应视图可以访问类级别实例变量(即@my_variable
)。
只需在{em>控制器中使用@projects = Project.all.each
,然后在{em>视图中将Project.all
替换为@projects
。