我有一个要清理模型的旧数据库。
数据库在应用程序之间共享,因此我无法修改它。
我有一个名为 Catalog
的模型,它依赖于 book_catalogs
表。
我这样做是为了使用好表:self.table_name = 'book_catalogs'
问题是当我想在模型 belongs_to :catalogable, polymorphic: true
中定义 CatalogBook
时,
我找不到将 foreign_type
覆盖为 BookCatalog
的方法。
这是我的模型的一个子集:
class Catalog
self.table_name = 'book_catalogs'
has_many :books, through: :catalogs_books
end
class VirtualCatalog
has_many :books, through: :catalogs_books
end
class Book
has_many :catalogs, through: :catalogs_books
end
class CatalogsBook
belongs_to :book
belongs_to :catalogable, polymorphism: true, foreign_key: :catalog_id
end
在我的数据库中,我有这个:
catalogs_books
+------------+------------------+---------+
| catalog_id | catalogable_type | book_id |
+------------+------------------+---------+
| 15842 | BookCatalog | 4567894 |
+------------+------------------+---------+
ActiveRecord 查询示例:
SELECT "books".*
FROM "books"
INNER JOIN "catalogs_books" ON "books"."id" = "catalogs_books"."book_id"
WHERE "catalogs_books"."catalog_id" = $1
AND "catalogs_books"."catalogable_type" = $2
[["catalog_id", 1], ["catalogable_type", "Catalog"]]`
如何用
catalogable_type
替换 Catalog
BookCatalog
?
最佳答案
您使用 foreign_type
选项:
class CatalogsBook
belongs_to :book
belongs_to :catalogable, polymorphism: true, foreign_type: :book_catalog, foreign_key: :catalog_id
end
关于ruby-on-rails - 如何更改多态模型的外部类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50817470/