【问题标题】:How to change the foreign type for a polymorphic model如何更改多态模型的外部类型
【发布时间】:2018-11-21 20:51:45
【问题描述】:

我有一个想要清理模型的旧数据库。 该数据库在应用程序之间共享,因此我无法对其进行修改。

我有一个名为 Catalog 的模型,它依赖于 book_catalogs 表。 我这样做是为了使用好表:self.table_name = 'book_catalogs'

问题是当我想在模型CatalogBook中定义belongs_to :catalogable, polymorphic: true时, 我找不到将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

【问题讨论】:

    标签: ruby-on-rails activerecord polymorphism ruby-on-rails-5


    【解决方案1】:

    您使用foreign_type 选项:

    class CatalogsBook
      belongs_to :book
      belongs_to :catalogable, polymorphism: true, foreign_type: :book_catalog, foreign_key: :catalog_id
    end
    

    【讨论】:

      猜你喜欢
      • 2020-10-28
      • 2017-01-21
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 2015-12-03
      • 2016-10-23
      相关资源
      最近更新 更多