Всем привет.
Есть модели: user, post, revision.
В таблице revisions следующие поля: target_type, target_id, version, user_id.
То есть при выполнении
@revision = @post.revisions.build(:target_type => 'Post', :version => 'test', :user_id => current_user.id)
в target_type записывается тип цели ревизии - Post, в target_id должен записываться id поста, в version записываются значения полей поста в YAML-формате, и user_id - это id автора ревизии (то есть того, кто изменил пост).
Если я правильно понимаю, в моделях должно быть что-то вроде такого:
# user.rb
has_many :posts
# post.rb
belongs_to :user
has_many :revisions
# revision.rb
belongs_to :user
belongs_to :app
Но как мне указать, что нужно при выполнении build заносить в target_type - 'Post', в target_id - @post.id, в user_id - current_user.id? Запутался с ключами :through, :source, :polymorphic и т.д.
Пробовал в post.rb прописывать:
has_many :revisions, :as => :target, :dependent => :destroy
Но при создании ассоциации пишет "ActiveRecord::UnknownAttributeError: unknown attribute: target_id"
Помогите, пожалуйста, разобраться.
Примечание:
Антон Витальевич, благодарю за ответ! Сейчас разнес по разным таблицам (то есть post_revisions и т.д.), но в будущем планирую объединить в одну таблицу ревизий.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.