【发布时间】:2011-11-06 23:47:43
【问题描述】:
我正在处理的网站上有一个菜单,即 food_items 菜单。表中的每条记录还包含一个类别字段。此类别可以是汉堡、零食、饮料或其他任何他们想要对食品进行分类的东西。
我正在尝试显示菜单,其中包含按此类别字段分组的项目。到目前为止我的尝试:
food_item_menus_controller.rb
...
def food_list
@foods = FoodItem.all
@food_list = @foods.group_by { |t| t.category }
end
views/food_item_menus/index.html.haml
= @food_list.group_by (@food_items.category).each do |food_list|
%p
= food_list.name
%ul
- for food_items in food_items
%li
= food_items.name
我的错误是我有一个 nil 对象。我想我对@foods 的调用没有返回任何内容。
models/food_item.rb
class FoodItem < ActiveRecord::Base
has_many :menus, :through => :food_item_menus
has_many :food_item_menus
end
我是不是设置错了?或者我的想法是错误的,如果我在视图中调用@foods,它实际上并没有调用我在控制器中设置的变量?我越想弄清楚这一点,我就越对一切感到困惑,包括基础知识。
【问题讨论】:
-
仅供参考,您不要“调用”
@foods,而是“引用”它。你调用方法。您可以使用rails c(控制台)验证FoodItem.all是否返回您期望的结果。@foods.each do |category|很奇怪,因为每个对象实际上都是一个FoodItem,而不是一个类别。 -
非常感谢您的回复。我更改了一些代码,我明白你的意思。所以现在我得到一个:nil:NilClass 错误的未定义方法“类别”。所以也许我不明白这个论点,如何告诉group_by函数使用表中的类别字段?这不是 table.field 方式?
标签: ruby-on-rails view group-by