Лента активности с использованием полиморфной ассоциации не может получить: зависимый =>: уничтожить на работу - PullRequest
2 голосов
/ 26 января 2012

У меня есть модель, используемая для создания ленты действий, которая называется «Деятельность» и имеет следующие столбцы:

t.integer  "user_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer  "source_id",     :null => false
t.integer  "activity_type", :null => false
t.text     "data",          :null => false

Я пытаюсь прикрепить каждое действие к различным типам объектов, которые стоит отображать в ленте (например, добавить в избранное, новые подключения и т. Д.). В настоящее время существуют следующие ассоциации:

belongs_to :user
belongs_to :source, :polymorphic => true

Я пытаюсь использовать source_id в качестве первичного ключа связывающего объекта (например, избранное) и activity_type в качестве enum (например, избранное => 1, приглашения => 2), используя гем simple_enum. *

ВОПРОС: Я не могу заставить :dependent => :destroy работать с моделью избранного. Это напоминает мне об исключении, что у меня нет внешнего ключа fav_id для того, чтобы он мог чисто удалить Activity, как только я удаляю Избранное. Как я могу справиться с этим?

ActiveRecord::StatementInvalid (PGError: ERROR:  column activities.favorite_id does not exist'

1 Ответ

2 голосов
/ 26 января 2012

Я считаю, что поле activity_type должно было называться source_type, чтобы Rails мог автоматически обрабатывать полиморфные вещи, и вам не нужно будет вручную контролировать его значение с помощью перечислений.

...