ActiveRecord::StatementInvalid (PG::UndefinedTable: ОШИБКА: отсутствует запись предложения FROM для списков таблиц)

Модель листинга

  belongs_to :listable, polymorphic: true
  belongs_to :car, -> { where(listings: {listable_type: 'Car'}) }, foreign_key: 'listable_id'

  def car
     return unless listable_type == "Car"
     super
  end



listing = Listing.first
listing.car

Ошибка

ActiveRecord::StatementInvalid (PG::UndefinedTable: ОШИБКА: отсутствует запись в предложении FROM для таблицы "списки") LINE 1: ....* FROM "cars" WHERE "cars"."id" = $1 AND "listings". .. ^ : ВЫБЕРИТЕ «автомобили».* ИЗ «автомобилей», ГДЕ «автомобили». «id» = $1 И «списки». «listable_type» = $2 LIMIT $3

Я также пробовал:

  belongs_to :car, -> {  joins(:listings).where(listings: {listable_type: 'Car'}) }, foreign_key: 'listable_id'

и я получил:

ActiveRecord::ConfigurationError (Не удается присоединить «Автомобиль» к ассоциации с именем «списки»; возможно, вы написали с ошибкой?)

Что вызывает эту ошибку?


person user2012677    schedule 26.07.2019    source источник
comment
вместо super просто вызовите listable, это вернет ваш Car. Принадлежность_то неверна, потому что предложение where применяется к модели Car (отсюда и ошибка). Чтобы решить эту проблему, вам нужно join(:listings) и бросить туда, где я считаю   -  person engineersmnky    schedule 26.07.2019
comment
@engineersmnky, Спасибо! Это связано с этим вопросом, если он изменит ваш ответ. отношение   -  person user2012677    schedule 26.07.2019
comment
Однако вы пропустили этот комментарий, который предлагает аналогичный тому, что у меня есть, однако, похоже, они рекомендуют -> { joins(:listings).where(listings: {listable_type: 'Car'}) }, что делает для меня мало смысла, потому что соединение уже должно обеспечивать это для полиморфа, например. INNER JOIN listings ON listings.listable_id = cars.id and listings.listable_type = 'Car' Так что я до сих пор не уверен, что это нужно. Я никогда не использую полиморфы таким образом, иначе я бы опубликовал ответ.   -  person engineersmnky    schedule 26.07.2019
comment
@engineersmnky, я попробовал вашу заметку, но тоже получил указанную выше ошибку. Спасибо за попытку. Если у вас есть другие мысли, пожалуйста, дайте мне знать. Я почти готов через свой компьютер вылететь из окна   -  person user2012677    schedule 26.07.2019
comment
Ну, Car has_one :listing, нужно ли что-то адаптировать?   -  person user2012677    schedule 26.07.2019
comment
Давайте продолжим обсуждение в чате.   -  person user2012677    schedule 26.07.2019