【发布时间】:2012-09-17 18:29:16
【问题描述】:
我正在尝试从一个盒子中检索所有项目的数据,一个盒子可以有隔间,我想在盒子级别获取所有隔间信息。物品是多态的,因为盒子不一定有隔间。
型号
class Box < ActiveRecord::Base
has_many :compartments
has_many :items, :as => :itemable
end
在我的控制器中,我可以通过以下方式返回结果:
@box = Box.find(params[:id])
@itemable = @box.compartments.first
@itemable = @box.compartments.last
查看
<% @items.each do |item| %>
<%= item.name %>
<% end %>
但如果我再尝试
@itemable = @box.compartments
或
@itemable = @box.compartments.find(:all)
我得到了错误
undefined method `items' for #<ActiveRecord::Array>
或
undefined method `items' for #<ActiveRecord::Relation>
任何人都可以帮助从所有隔间获取结果吗?
【问题讨论】:
-
你可能需要使用
.itemables,每个:as => :itemable? -
您是否在 Itemable 和 Compartment 类中定义了“belongs_to”?
-
@megas 项目是多态的,所以在隔间中我有: has_many :items, :as => :itemable too
-
不明白,Box 和 Compartment 是什么关系?为什么你已经定义了多态连接但没有在你的代码中使用它?
-
@megas 隔间属于一个盒子,项目是多态的,因此它们也可以属于不一定有隔间的盒子实例。我的问题是我想从一个有两个容器的盒子的实例中查看信息,并在盒子视图中查看这些容器的项目。
标签: ruby-on-rails-3 activerecord controller