Как изменить внешний тип для полиморфной модели - PullRequest
0 голосов
/ 12 июня 2018

У меня есть устаревшая база данных, которую я хочу очистить модель.База данных совместно используется приложениями, поэтому я не могу ее изменить.

У меня есть модель с именем 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?

...