Реализация has_many: через - PullRequest
0 голосов
/ 24 февраля 2012

Я подумываю о создании следующих моделей с использованием has_many: through:

class Contract < AR::Base
  has_many :clientlines
  has_many :codelines
  has_many :clients, :through => :clientlines
  has_many :codes, :through => :codelines
end

class clientlines < AR::Base
  belongs_to :contract
  belongs_to :client
end

class Client < AR::Base
  has_many :clientlines
  has_many :contracts, :through => :clientlines
end

class codeline < AR::Base
  belongs_to :contract
  belongs_to :code
  units_alloc -------**I would like to add this attribute after this intermediate
 end                 has been created?

class Code < AR::Base
  has_many :codelines
  has_many :contracts, :through => :codelines
end

Должен ли я сначала создавать модели с помощью 'rails Generate Model Контракт: например, authnum: string, client_id: integer, st_date: date, end_date: date'. Затем заполните все ассоциации до миграции?.

Кроме того, я понимаю, что все соединительные таблицы создаются автоматически с помощью rails при использовании связи has_many: through. Когда это произойдет?

Наконец, как указано **, могу ли я иметь этот атрибут в кодовых строках, и я могу создать 'миграцию генерации рельсов add_units_alloc_to_codelines units_alloc: number', чтобы добавить этот атрибут в таблицу соединений? Мне также было интересно, как я объявляю число слишком двумя десятичными знаками?

Если у вас есть время и желание, не могли бы вы прокомментировать мой предложенный дизайн для моей базы данных?

Спасибо.

1 Ответ

0 голосов
/ 24 февраля 2012
  1. с помощью has_many :through вы используете третью модель, которая устанавливает связь между двумя другими, поэтому rails не создает эту модель автоматически, вы создаете ее самостоятельно и ссылаетесь на внешние ключи для другой.две модели.

  2. не называйте свои модели во множественном числе, всегда в единственном числе.если вы не можете назвать их в единственном числе, вы делаете это неправильно

  3. Порядок создания моделей не должен иметь значения слишком много (рельсыгенерирует некоторые миграции, которые вы можете легко изменить позже)

  4. Этот атрибут units_alloc, просто добавьте его в модель при его создании, просто так!

  5. для 2 десятичных знаков используйте в миграции что-то вроде t.decimal :amount, :precision => 6, :scale => 2 (в этом примере вы получите 6 цифр и 2 десятичных знака)

  6. Прочитайте Rails Guides Это действительно поможет вам избежать неприятностей

...