不允许调用对象的ActiveRecord对象数组

时间:2017-03-10 21:30:52

标签: ruby-on-rails

我在调用ActiveRecord对象数组中的对象时遇到问题。

这是我的控制器代码构建一系列事物:

onething = Thing.where(this: id, that: id)
@things.push(onething) if onething.present?

这是循环的,以便构建一个特定事物的数组,在where方法中为此传递不同的ID。

这就是父母的事情:

class Thing < ApplicationRecord
  belongs_to :this
  belongs_to :that
end

虽然在我看来,当我调用@things变量的元素时,我会发现undefined methods错误。

在我的视图中显示@things变量时,为了进行调试,我得到这样的结果:

[#<ActiveRecord::Relation [#<Thing id: 1 ....>]>, #<ActiveRecord::Relation [#<Thing id: 2.......>]>]

然而,来自直接查询(例如Thing.find(params[:id]))的记录的变量会返回稍微不同的内容:

#<Thing id: 1, ....>

为什么第一个不允许我使用简单查询(例如Thing.id)查询对象,因为第二个工作完全没问题?

1 个答案:

答案 0 :(得分:2)

这是因为您正在将ActiveRecord::Relation推送到@things数组(假设@things确实是一个数组)。因此,不是以一组对象结束,而是用一个由对象数组组成的数组进行清理。请改用concat

onething = Thing.where( this: id, that: id)
@things.concat(onething) if onething.present?

这会将两个对象集合组合成一个数组。