有一个模型名为:作者有很多书。
由于传统原因,authors
表中有一列,名为:favorite_books,基本上是作者最喜欢的书的id的数组。
我想根据favorite_books
列中的id在Author
模型中定义一个has_many
关联到图书。类似于以下内容:
class Author < ApplicationRecord
has_many :books, through: -> { favorite_books } # it's invalid code as of now
end
通过文档,我们可以传递像source
和source_type
这样的选项,但我不确定是否可以传递列。
1条答案
按热度按时间ghhaqwfi1#
不幸的是,你不能建立这样的联系。你有两个选择
定义一个这样的方法,它将返回一个集合
这不是一个成熟的关联,因此不会有
author.favourite_books << Book.new
等好东西。另一种方法,但需要更多的工作,是将其重构为Author和Book之间的多对多关系。在Rails中有两种方法,要么是
has_many through
,要么是has_and_belongs_to_many`。Rails Guides有一个很好的部分,介绍如何选择一个https://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many第二种解决方案需要数据迁移,这可能是一个多步骤的过程:
如果你有任何后续问题,我很乐意扩展答案。