Я понимаю, что вы пытаетесь сделать здесь, и есть гораздо более простой способ сделать это. Это называется полиморфизмом. Вы хотите, чтобы вы могли принадлежать к нескольким типам вещей - иногда к звонкам, иногда к электронной почте и так далее. Хорошая новость в том, что вы уже достаточно близки. Вот как вы это настроили.
В вашей миграции переименуйте поле "актив" в "asset_type":
rename_column :todos, :asset, :asset_type
Теперь добавьте это к своим моделям:
class Todo < ActiveRecord::Base
belongs_to :asset, :polymorphic => true
end
class Call < ActiveRecord::Base
has_many :todos, :as => :asset
end
class Email < ActiveRecord::Base
has_many :todos, :as => :asset
end
В классе, который будет принадлежать многим различным типам объектов, у вас есть строковый столбец asset_type и целочисленный столбец asset_id. И вы указываете, что он принадлежит к полиморфной ассоциации, как показано выше. Затем во всех моделях, которые могут иметь to_many задачи, вы добавляете часть :as => :asset
, чтобы сообщить Rails, как найти связанные задачи.
Это очень просто, и теперь оно работает так же, как и любой другой has_many. Надеюсь, это поможет!
ОБНОВЛЕНИЕ: Это статья, которую я написал, которая иллюстрирует полиморфизм не только на уровне модели, но и во всех формах вашего сайта:
http://kconrails.com/2010/10/19/common-addresses-using-polymorphism-and-nested-attributes-in-rails/