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