Неправильный SQL-запрос сделан с "has_many" для подкласса - PullRequest
0 голосов
/ 28 января 2012

Я пытаюсь реализовать отношения, похожие на Facebook. Я хотел использовать наследование для этого, поэтому вот моя структура:

Любит с атрибутом user_id: integer |> PostsLike, который наследует Like с атрибутом post_id: integer

Итак, вот моя модель Like.rb:

class Like < ActiveRecord::Base
  belongs_to :user
end

А потом моя модель PostLike.rb:

class Postlike < Like
  belongs_to :post
end

И, наконец, у меня есть модель поста, которая будет иметь несколько объектов постликов:

class Post < ActiveRecord::Base

  has_many :postlikes

end

Но вот моя проблема, когда я вхожу в IRC и это:

  1. Я получаю объект Post:

    ruby-1.9.2-p290: 001> @p = Post.all.first

  2. Я пытаюсь получить постлики этого объекта, вот выражение sql:

    ВЫБРАТЬ likes. * ОТ likes ГДЕ likes. type IN ('Postlike') И likes. post_id = 310

Так что в основном вместо того, чтобы делать

postlikes.post_id

Rails 'делает

likes.post_id

Есть идеи, чтобы это исправить?

1 Ответ

1 голос
/ 28 января 2012

ActiveRecord хранит объекты Like и Postlike в одной и той же таблице с именем «likes» и использует столбец с именем «type» для сохранения класса объекта.Это объясняет утверждение:

WHERE likes.type IN ('Postlike') AND likes.post_id = 310

Нет таблицы postlikes

См. Главу "Наследование одной таблицы" в http://api.rubyonrails.org/classes/ActiveRecord/Base.html

...