Rails: я должен всегда определять ассоциации между моделями? - PullRequest
1 голос
/ 19 декабря 2010

У меня есть следующие модели:

class Aircon < ActiveRecord::Base
  belongs_to :shop
  belongs_to :brand
  belongs_to :power
  accepts_nested_attributes_for :shop, :brand, :power
end

class Shop < ActiveRecord::Base
  has_many :aircons
  has_many :brands, :through => :aircons
  has_many :powers, :through => :aircons
end

class Brand < ActiveRecord::Base
  has_many :aircons
  has_many :shops,  :through => :aircons
  has_many :powers, :through => :aircons
end

class Power < ActiveRecord::Base
  has_many :aircons
  has_many :shops,  :through => :aircons
  has_many :brands, :through => :aircons
end

Вопрос 1

Как видите, между двумя моделями существует соответствующая связь. Вообще, я думаю, это неплохая идея, если это имеет смысл. Что ты думаешь?

Вопрос 2

Теперь я хочу добавить другую модель Model и установить следующие ассоциации:

class Model < ActiveRecord::Base
  belongs_to :brand
end  

class Brand < ActiveRecord::Base
  ...
  has_many :models
end

Какая была бы подходящая связь между Model и Aircon?

Вопрос 3

Определите ли вы ассоциации между:

  • Model и Shop
  • Model и Power

Если да, то какой тип ассоциации?

1 Ответ

2 голосов
/ 19 декабря 2010

Насколько я помню, модель может быть зарезервирована. Возможно, вам придется использовать Make.

Q1 Лучше всего связывать модели в Rails в обоих направлениях.

Q2 Модель: has_many =>: кондиционеры

Aircon: own_to =>: модель

Q3 Я бы не хотел, чтобы Power была моделью. На самом деле это атрибут Aircon. Я предполагаю, что мощность - это BTUs или Вт охлаждения для Aircon. Что-то, что есть во всех кондиционерах.

Затем вы должны сказать Aircons.find_by_power (500..1000), чтобы найти все кондиционеры, которые имеют мощность от 500 до 1000

...