我在调用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
)查询对象,因为第二个工作完全没问题?
答案 0 :(得分:2)
这是因为您正在将ActiveRecord::Relation
推送到@things
数组(假设@things
确实是一个数组)。因此,不是以一组对象结束,而是用一个由对象数组组成的数组进行清理。请改用concat
:
onething = Thing.where( this: id, that: id)
@things.concat(onething) if onething.present?
这会将两个对象集合组合成一个数组。