Модель отношения человека на человека в Ruby-on-Rails, используя Has_Many: через

StackOverflow https://stackoverflow.com/questions/2192477

Вопрос

Я хотел бы моделировать отношения человека к другому человеку, где отношения не обязательно иерархичны (то есть друзья и коллеги, а не родители и дети), и я заинтересован в захвате более подробной информации о каждом отношениях (например, заметки, тип отношений , Дата установлена). Наконец, я хотел бы использовать отношения 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

Вопросы:

  1. Как правильно определить отношения между этими таблицами?
  2. Поскольку комбинация my_id / your_id уникальна, имеет ли смысл устранить: ID на таблице отношений?
  3. Есть ли лучшие имена для полей «My_id» & 'your_id', чтобы использовать конвенции ROR?
  4. У меня есть трудности с отношениями ACT_AS_TREE, если одна из столбцов не название «Parent_id»?
Это было полезно?

Решение

  1. Просто пару дней назад был спросин аналогичный вопрос: «Отношения много ко многим с той же моделью в рельсах?». Отказ Я попытался широко документировать, как делать петли ассоциации там. Возможно, это поможет вам вместе?

  2. Столы без идентификаторов в рельсах когда-либо видны только с has_and_belongs_to_many Ассоциация. С регулярным has_many :through Ассоциации, модель присоединения таблицы похожа на любую другую модель AcciCerecord и требует столбца ID

  3. Я не знаю о хорошей конвенции здесь, но эти примеры немного странно. Вы бы доступа к ним как relationship.your, который чувствует себя немного неудобно для меня лично. Возможно your_person_id, который будет доступен как relationship.your_person, и понять, что вы имеете дело с Person пример? Другой вариант может быть relationship.you.

  4. Я никогда не использовал acts_as_tree, но вы можете вызвать его с таким параметром, как так: acts_as_tree :foreign_key => 'my_id'

Как я упоминаю в своем ответе на другой вопрос, Похоже, что ваша самая большая трудность будет двунаправленными отношениями. После того, как человек А связан с человеком B, не подразумевается, что человек B связан с человеком А., который, к сожалению, сложно выполнить в ActiveRecord, от того, что я могу сказать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top