Модель отношения человека на человека в Ruby-on-Rails, используя Has_Many: через
-
25-09-2019 - |
Вопрос
Я хотел бы моделировать отношения человека к другому человеку, где отношения не обязательно иерархичны (то есть друзья и коллеги, а не родители и дети), и я заинтересован в захвате более подробной информации о каждом отношениях (например, заметки, тип отношений , Дата установлена). Наконец, я хотел бы использовать отношения 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»?
Решение
Просто пару дней назад был спросин аналогичный вопрос: «Отношения много ко многим с той же моделью в рельсах?». Отказ Я попытался широко документировать, как делать петли ассоциации там. Возможно, это поможет вам вместе?
Столы без идентификаторов в рельсах когда-либо видны только с
has_and_belongs_to_many
Ассоциация. С регулярнымhas_many :through
Ассоциации, модель присоединения таблицы похожа на любую другую модель AcciCerecord и требует столбца IDЯ не знаю о хорошей конвенции здесь, но эти примеры немного странно. Вы бы доступа к ним как
relationship.your
, который чувствует себя немного неудобно для меня лично. Возможноyour_person_id
, который будет доступен какrelationship.your_person
, и понять, что вы имеете дело сPerson
пример? Другой вариант может бытьrelationship.you
.Я никогда не использовал acts_as_tree, но вы можете вызвать его с таким параметром, как так:
acts_as_tree :foreign_key => 'my_id'
Как я упоминаю в своем ответе на другой вопрос, Похоже, что ваша самая большая трудность будет двунаправленными отношениями. После того, как человек А связан с человеком B, не подразумевается, что человек B связан с человеком А., который, к сожалению, сложно выполнить в ActiveRecord, от того, что я могу сказать.