2015-09-10 3 views
0

У меня есть две модели: Orders и Items. Это отношения многие ко многим, но я уверен, если HMT правильноПравильное использование has_many_through

Order model: 
-user_id 
-transaction_cost 
-delivery_time 

Item model: 
-price 
-name 

Заказы должны быть в состоянии получить все элементы в порядке
элементы не должны быть в состоянии получить все заказы

+1

[Это основная вещь, описанная в руководствах.] (Http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association) –

+0

@ RustamA.Gasanov Да, я проверил руководства, но было непонятно, была ли HMT правильной по сравнению с HABTM – Taylor

+0

HMT почти всегда является правильным выбором, если вы на 100% уверены, что вам не понадобится промежуточная модель –

ответ

2

Соглашение об этом заключается в использовании имен обеих моделей. Хорошее имя может быть ItemOrders. У многих есть почти правильный выбор здесь.

class Order < ActiveRecord::Base 
    has_many :item_orders, dependent: :destroy 
    has_many :items, through: :item_orders 
end 

class Item < ActiveRecord::Base 
    has_many :item_orders, dependent: :destroy 
    has_many :orders, through: :item_orders 
end 

class ItemOrder < ActiveRecord::Base 
    belongs_to :item 
    belongs_to :order 
end 

Теперь вы просто другой ActiveRecord модель, и вы можете добавить к ней, как вы хотите. Это также будет полезно для отладки. Вы можете даже использовать генератор модели/эшафот, чтобы произвести эти:

rails g model item_order order:references item:references 

Таким образом, вы получаете миграции правильно сразу. Ничего не нужно изменять на других моделях, кроме вышеуказанного кода.

Смежные вопросы