首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改多态模型的外部类型

如何更改多态模型的外部类型
EN

Stack Overflow用户
提问于 2018-06-12 20:39:15
回答 1查看 218关注 0票数 4

我有一个遗留数据库,我想要清理模型。数据库是在应用程序之间共享的,所以我无法修改它。

我有一个依赖于book_catalogs表的名为Catalog的模型。我做了一些类似的事情来使用好的表:self.table_name = 'book_catalogs'

问题是,当我想在模型CatalogBook中定义belongs_to :catalogable, polymorphic: true时,我找不到一种方法将foreign_type覆盖到BookCatalog

以下是我的模型的一个子集:

代码语言:javascript
复制
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 

在我的数据库里,我有这个:

代码语言:javascript
复制
catalogs_books
+------------+------------------+---------+
| catalog_id | catalogable_type | book_id |
+------------+------------------+---------+
| 15842      | BookCatalog      | 4567894 |
+------------+------------------+---------+

ActiveRecord查询示例:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2021-08-06 10:27:59

您可以使用foreign_type选项:

代码语言:javascript
复制
class CatalogsBook
  belongs_to :book
  belongs_to :catalogable, polymorphism: true, foreign_type: :book_catalog, foreign_key: :catalog_id
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50817470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档