Таблицы: (включены только соответствующие столбцы)
- пользователи : id
- отзывы : id , user_id , reviewable_type , reviewable_id
- subject_ones : id
- subject_twos : id
Модели: (это то, что я пробовал)
class User < ApplicationRecord
has_many :reviews
end
class Review < ApplicationRecord
belongs_to :user
belongs_to :reviewable, polymorphic: true
scope :subject_one, -> { where(reviewable_type: SubjectOne.name) }
end
class Reviewable < ApplicationRecord
has_many :reviews, as: :reviewable
end
class SubjectOne < Reviewable
end
class SubjectTwo < Reviewable
end
Строки в subject_ones
и subject_twos
действительно не изменятся, и пользователи могут выбрать включение строк из каждой. Эти две таблицы достаточно различаются, поэтому им нужны разные таблицы, но модель данных для самого обзора одинакова. Отображение для пользователя будет отличаться для разных типов. reviews
уникальны для user_id
, reviewable_type
и reviewable_id
Я бы хотел, чтобы конечный результат был чем-то, что я мог бы сделать user.reviews.subject_one.first.reviewable
, и он возвращает первую subject_ones
запись ,
По сути, мне трудно понять, как получить "рецензируемый" от review
.
Прямо сейчас, если позвоните user.reviews.subject_one.first.reviewable
, я получу:
PG::UndefinedTable: ERROR: relation "reviewables" does not exist LINE 8: WHERE a.attrelid = '"reviewables"'::regclass ^
Спасибо за любую помощь.