У меня есть модель с названием «Покупка» и модель с именем «TicketType».У покупки может быть много типов билетов, а у типа билетов может быть много покупок.
Итак, у меня есть
class Purchase < ActiveRecord::Base
has_many :purchases_ticket_types, :class_name => 'PurchaseTicketType'
has_many :ticket_types, :through => :purchases_ticket_types
end
class TicketType < ActiveRecord::Base
has_many :purchases_ticket_types, :class_name => 'PurchaseTicketType'
has_many :purchases, :through => :purchases_ticket_types
end
class PurchaseTicketType < ActiveRecord::Base
set_table_name "purchases_ticket_types"
belongs_to :purchase
belongs_to :ticket_type
end
Я знал, что на приобретение закупок_ticket_types для имени таблицы возникнут проблемы, как толькоActiveRecord не удалось определить правильное имя таблицы из имени класса в верблюжьей клетке.Я прекратил вызывать set_table_name.
Но самое страшное в том, чтобы сделать это:
purchase = Purchase.find(1)
purchase.purchases_ticket_types.each do |purchase_ticket_type|
puts 'join contains quantity: ' + purchase_ticket_type.quantity
puts 'ticket type name is: ' + purchase_ticket_type.ticket_type.name
end
Посмотрите, как многословно и повторяется это чтение.Все работает, но выглядит так ужасно.Есть ли лучший способ присвоения имен ассоциациям «многие ко многим», чтобы избежать такого рода вещей: purchase.purchases_ticket_types.first.ticket_type.name ?
Спасибо!