Ruby on Rails has_many: через ассоциации.Будет ли это работать? - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть модель магазина и модель покупателя.У магазина может быть много покупателей, а покупатель может покупать вещи во многих магазинах.Для этого отношения я создал модель соединения ShopCustomers.

create_table :shop_customers do |t|
  t.integer :shop_id
  t.integer :customer_id
  t.timestamps
end

Модели

 class Shop < ActiveRecord::Base
   has_many :shop_customers, :dependent => true
   has_many :customers, :through => shop_customers
   has_many :customers_groups
 end

class Customer < ActiveRecord::Base
   has_many :shop_customers, :dependent => true
   has_many :shops, :through => shop_customers
   belongs_to :customers_group_membership
end

class ShopCustomer < ActiveRecord::Base
   belongs_to :shop
   belongs_to :customer
end

Владельцы магазинов хотят иметь возможность группировать покупателей, и поэтому я добавил другую модель CustomersGroups.

class CustomersGroup < ActiveRecord::Base
  belongs_to :shop
end

И клиенты добавляются в группу через другую модель объединения.

create_table :customers_group_memberships do |t|
  t.integer :customers_group_id
  t.integer :customer_id
end

class CustomersGroupMembership < ActiveRecord::Base
  has_many :customers
  belongs_to :customers_group
end

Это правильный способ создания такого рода отношений, или это рецепт гибели, и я что-то упускаю, чтобы это не сработало.

1 Ответ

0 голосов
/ 06 декабря 2011

Нет, это не обычный способ сделать это. Взгляните на ассоциацию «имеет и принадлежит многим» (AKA: HABTM). Он создаст таблицу соединений shops_customers для вас и будет поддерживать ее без необходимости делать это вручную.

вот ссылка на apidock на HABTM: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many

...