В рельсах определенно возможно определить объединяющую таблицу, которая имеет дополнительные поля. Так что в этом случае я бы определил следующую таблицу:
class LinkedImage
belongs_to :person
belongs_to :image
OWNER=1
TAGGED=2
validates :relation_type, :inclusion => {:in => [OWNER, TAGGED]}
end
Эта таблица будет связывать изображение с человеком и имеет дополнительное поле relation_type
(можно подумать о более подходящем имени, может быть), которое теперь может иметь два значения: 1 (для OWNER
, что означает изображение было загружено непосредственно человеку) и 2 (человек помечен на изображении). Помимо отношения, возможно, вы захотите сохранить что-то дополнительное, например, положение на изображении, дополнительный комментарий, тогда вы можете легко добавить это и здесь.
И человек будет выглядеть так:
class Person
has_many :linked_images
has_many :uploaded_images, :class_name => Image,
:through => :linked_images,
:conditions => "relation_type=#{LinkedImage::OWNER}"
has_many :tagged_in_images, :class_name => Image,
:through => :linked_images,
:conditions => 'relation_type=#{LinkedImage::TAGGED}"
end
и код для Image
могут быть похожими.
Надеюсь, это поможет.