После прочтения руководств по Ruby on Rails и нескольких ответов на вопросы stackoverflow на вопросы о полиморфной ассоциации я понимаю его использование и реализацию, но у меня есть вопрос о конкретном сценарии использования. У меня есть tags
, который может быть связан с несколькими topics
, categories
, images
и другими различными моделями (которые также имеют различные значения tags
), но вместо размещения опорных полей (foreign_id
, foreign_type
) в таблице tags
я бы предпочел создать отдельную таблицу связей. Это все еще возможно, используя :polymorphic => true
?
Примерно так:
create_table :tags do |t|
t.string :name
t.remove_timestamps
end
create_table :object_tags, :id => false do |t|
t.integer :tag_id
t.references :tagable, :polymorphic => true
t.remove_timestamps
end
Если это невозможно, я планировал создать ту же таблицу :object_tags
и использовать :conditions
в модели Tag
и других моделях для навязывания ассоциаций. Есть ли способ рельсов сделать это? Спасибо! (работа с rails 3.0.9 и ruby 1.8.7 <- потому что сервер развертывания все еще использует 1.8.7) </p>
UPDATE:
Спасибо Дельба! Ответ - рабочее решение для полиморфизма HABTM.
class Tag < ActiveRecord::Base
has_many :labels
end
class Label < ActiveRecord::Base
belongs_to :taggable, :polymorphic => true
belongs_to :tag
end
class Topic < ActiveRecord::Base
has_many :labels, :as => :taggable
has_many :tags, :through => :labels
end
create_table :tags, :timestamps => false do |t|
t.string :name
end
create_table :labels, :timestamps => false, :id => false do |t|
t.integer :tag_id
t.references :taggable, :polymorphic => true
end
ОБНОВЛЕНИЕ: Поскольку мне нужен двунаправленный HABTM, я вернулся к созданию отдельных таблиц.