Ruby on rails 如何在ActiveRecord中将ActiveRecord\u AssociationRelation转换为数组?

Ruby on rails 如何在ActiveRecord中将ActiveRecord\u AssociationRelation转换为数组?,ruby-on-rails,Ruby On Rails,如何将ActiveRecord\u AssociationRelation转换为Rails模型实例数组 我有一段代码,它在保存后保存在钩子中,如下所示: class Like < ApplicationRecord belongs_to :likee, class_name: 'User', foreign_key: 'likee_id' belongs_to :liker, class_name: 'User', foreign_key: 'liker_id' after_

如何将
ActiveRecord\u AssociationRelation
转换为Rails模型实例数组

我有一段代码,它在保存后保存在钩子中,如下所示:

class Like < ApplicationRecord
  belongs_to :likee, class_name: 'User', foreign_key: 'likee_id'
  belongs_to :liker, class_name: 'User', foreign_key: 'liker_id'

  after_save :mutual_like?

  private

  def mutual_like?
    if liker.likes.where(likee: liker) // returns collection proxy but I want to return an array of model instances so that I can create another model

    end
  end
end
我认为问题在于Rails没有基于likee\u id/liker\u id的外键来关联模型。

试试看

liker.likes.where(likee:liker.to_a

到a()
公共

将关系对象转换为数组


我试过了,得到了
ActiveRecord::StatementInvalid:PG::UndefinedColumn:ERROR:column likes.user\u id不存在
您需要一个为
liker\u id
likee\u id
添加数据库列的程序。相关回答:似乎你在
关联定义中的问题在
用户
类中有很多:喜欢
。你也需要在那里指定外键。这个
如果liker.likes.where(likee:liker)
返回bool值,它不能返回
集合代理
我还保存了
liker.likes.where(likee:liker)
到一个变量,它是一个集合代理使用一些加载方法来获取AR:
liker.likes.where(likee:liker).all
返回相同的内容。
liker.likes.where(likee:liker)。首先
  create_table "likes", force: :cascade do |t|
    t.integer  "liker_id",      null: false
    t.integer  "likee_id",      null: false
    ...
  end