Отношения один ко многим в Rails - PullRequest
0 голосов
/ 05 марта 2012

Мне трудно настроить базовую структуру моих баз данных.

У меня есть продукты (около 50). Каждый продукт связан с одним или более местами.

Базовая схема будет такой (отношения пока нет)

Продукты

id:integer
name:string

Места

id:integer
name:string
content:string

Сначала я подумал, что могу соединять места и продукты, добавляя place_id к продуктам и has_many belong_to в контроллерах, но, поскольку продукт может иметь более одного места, я не знаю, как.

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Просто используйте через соединение

ТоварыМесто (новый стол)

product_id
place_id

А в моделях

class Product < ActiveRecord::Base
  has_many :places, :through => :products_places
end

class Place < ActiveRecord::Base
  has_many :products, :through => :products_places
end

Также есть has_and_belongs_to_many, которые фактически делают то же самое (с таблицей ProductsPlaces)

class Product < ActiveRecord::Base
  has_and_belongs_to_many :places
end

class Place < ActiveRecord::Base
   has_and_belongs_to_many :products
end

Но лучше использовать до конца, потому что has_and_belongs_to_many устарела.

1 голос
/ 05 марта 2012

Если у продукта есть_множество мест, а у продукта есть_множество продуктов, ваша ассоциация должна быть «многие ко многим».

Есть два способа сделать это в Rails, наиболее рекомендуемым является модель соединения. Вы явно обозначаете отношения между Продуктами и Местами. Вы могли бы назвать это ProductLocation или Shop или подобным, это выглядело бы так:

product_locations:
  product_id
  place_id

class ProductLocation < ActiveRecord::Base
  belongs_to :product
  belongs_to :place
end

class Place < ActiveRecord::Base
  has_many :product_locations
  has_many :products, :through => :product_locations
end

class Product < ActiveRecord::Base
  has_many :product_locations
  has_many :places, :through => :product_locations
end

См. http://guides.rubyonrails.org/association_basics.html#choosing-between-has_many-through-and-has_and_belongs_to_many

0 голосов
/ 05 марта 2012

Похоже, вы хотите добавить product_id к places.

Товар имеет_Много места

Место принадлежит_Товар

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...