如何在视图中查看RoR控制器实例变量?

时间:2012-10-05 05:02:02

标签: ruby-on-rails

我有一个表项目每个都有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 %>

2 个答案:

答案 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