【问题标题】:Rails: Retrieving polymorphic data from nested modelRails:从嵌套模型中检索多态数据
【发布时间】: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 =&gt; :itemable
  • 您是否在 Itemable 和 Compartment 类中定义了“belongs_to”?
  • @megas 项目是多态的,所以在隔间中我有: has_many :items, :as => :itemable too
  • 不明白,Box 和 Compartment 是什么关系?为什么你已经定义了多态连接但没有在你的代码中使用它?
  • @megas 隔间属于一个盒子,项目是多态的,因此它们也可以属于不一定有隔间的盒子实例。我的问题是我想从一个有两个容器的盒子的实例中查看信息,并在盒子视图中查看这些容器的项目。

标签: ruby-on-rails-3 activerecord controller


【解决方案1】:

所以在隔间里你有

belongs_to :box
has_many :items, :as => :itemable

是这样吗? @box.compartments 应该返回一个隔间数组对吗?听起来items 不知何故被@box.compartments 调用

【讨论】:

  • 是的,隔间 belongs_to 盒子。我注意到@box.compartments 的错误更改为 #<:relation> 的未定义方法 `items'
  • 在 [@box.compartments] 之后我可以做 [@items = @itemable.first.items],所以数组似乎可以工作 - 我只需要弄清楚如何在控制器,我想?
  • 我以为@itemable = @box.compartments报错了,所以你不能试试@itemable.first.items
  • 你说得对,我尝试了一些东西,在 [@itemable = @box.compartments] 之后,我通过添加 [@items = @itemable] 来让它工作
猜你喜欢
  • 2017-03-29
  • 2018-12-15
  • 1970-01-01
  • 2013-07-10
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多