Стремительная загрузка полиморфных ассоциаций в Rails (включая пример чистого кода) - PullRequest
0 голосов
/ 24 марта 2019

У меня следующая структура db (Postgresql) в Rails 5:

class Book < ApplicationRecord
  belongs_to :location
end

class Song < ApplicationRecord
  belongs_to :location
end

class Location < ApplicationRecord
  # position INT
end

class Item < ApplicationRecord
  belongs_to :product, polymorphic: true # Book or Song
  has_one :location, through: :product
end

# Expected result
Item.includes(product: :location).order('locations.position ASC')
Item.first.location

# Actual result
# ActiveRecord::EagerLoadPolymorphicError (Cannot eagerly load the polymorphic association :product)

Но у меня проблемы с ссылками Местоположение через полиморфизм Продукт . Может быть, я пропустил некоторые варианты и выбрал неправильную структуру БД? Не могли бы вы порекомендовать здесь некоторые обходные пути Rails way, а не raw sql?

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Причина в том, что вы делаете это неправильно. В своем коде вы говорите, что продукт будет полиморфным, но все еще с неправильным синтаксисом и не включающим эту полиморфную ассоциацию в других моделях. Официальное руководство для уточнения.

1 голос
/ 24 марта 2019

Я не понимаю вашу модель предметов, но полиморфизм обычно настраивается так:

class Book < ApplicationRecord
  has_one :location, as: :locateable, class_name: Location
end

class Song < ApplicationRecord
  has_one :location, as: :locateable, class_name: Location
end

class Location < ApplicationRecord
  belongs_to :locateable, polymorphic: true
end

Но, пожалуйста, обратитесь к документации по полиморфному отношению

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...