Нет никакой разницы в рельсах 3 и 2.
class Page < ActiveRecord::Base
belongs_to :text # foreign key - text_id
belongs_to :picture # foreign key - picture_id
end
class Text < ActiveRecord::Base
has_many : pictures
has_many :pictures, :through => :pages
end
class Picture < ActiveRecord::Base
has_many :assignments
has_many :texts, :through => :pages
end
Вторая идея
Ваш последний комментарий заставил меня подумать, что у вас может быть тонна content_types или даже больше, что content_types могут быть сгенерированы на стороне клиента.
Вот альтернатива, почему бы не сделать только одну модель, Page - и сделать так, чтобы она имела атрибуты, отражающие ее content_type. Тогда вы можете установить с ними отношения, как это ..
@show_texts = Page.find(:all).select{ |p| p.text != nil }.collect{|p| p.id}.inspect
И так далее, и так далее. Просто идея. Честно говоря, я попытался бы реорганизовать этот код выше для дружественной к SQL версии, потому что это довольно много способов поразить БД.