Я хотел бы смоделировать отношения человека с другим человеком, где отношения не обязательно являются иерархическими (то есть друзьями и коллегами, а не родителями и детьми), и мне интересно получить более подробную информацию о каждой связи (например, заметки, тип отношений, дата установления). Наконец, я хотел бы использовать отношение act_as_tree, чтобы иметь возможность перемещаться / строить схемы этих отношений.
Миграции:
class CreateProfiles < ActiveRecord::Migration def self.up
create_table :profiles do |table|
table.column :firstName, :string
table.column :lastName, :string
table.column :telephone, :string
table.column :emailAddress, :string
table.column :location, :string
table.timestamps
end end def self.down
drop_table :profiles end end
class Relationship < ActiveRecord::Migration def self.up
create_table :relationships, :id => false do |table|
table.column my_id :integer
table.column your_id :integer
table.column relationshipType :string
table.column dateEstablished :date
table.column notes :text
table.timestamps end end def self.down
drop_table :relationships end end
Модели:
class Person < ActiveRecord::Base
has_many :relationships, :foreign_key => "my_id"
has_many :persons :through => :relationships
end
class Relationship < ActiveRecord::Base
belongs_to :persons
acts_as_tree
end
Вопросы:
- Как правильно определить отношения между этими таблицами?
- Поскольку комбинация my_id / your_id уникальна, имеет ли смысл исключать: id из таблицы отношений?
- Есть ли более подходящие имена для полей 'my_id' и 'your_id', чтобы использовать соглашения RoR?
- Будут ли у меня трудности с отношением act_as_tree, если один из столбцов не имеет имя 'parent_id'?