Я относительно новичок в рельсах. У меня есть этот сайт бронирования путешествий с функционирующей системой корзины. Я пытаюсь отправить все, что есть в моей корзине, в мою модель заказа, чтобы пользователи могли видеть, что они заказали. По сути, каждый пользователь может забронировать несколько поездок, в которых может быть несколько путешественников.
Вот мой код:
Параметры:
Parameters: {"order"=>{"trip_ids"=>["1", "2"], "traveller_ids"=>["1", "2", "3", "4"]}, "commit"=>"Create Order"}
Модель TripTraveller
class TripTraveller < ApplicationRecord
belongs_to :trip
belongs_to :traveller
belongs_to :order
end
Модель поездки
class Trip < ApplicationRecord
has_many :trip_travellers
has_many :travellers, :through => :trip_travellers
end
Модель заказа
class Order < ApplicationRecord
has_many :trip_travellers
has_many :trips, through: :trip_travellers
has_many :travellers, through: :trip_travellers
end
В моем контроллере заказа:
def create
params[:order][:trip_ids].each do |trip|
params[:order][:traveller_ids].each do |traveller|
trip_traveller = TripTraveller.create!(order_id: @order.id, trip_id: trip, traveller_id: traveller)
end
end
end
То, чего я пытаюсь достичь, заключается в этомНапример, можно получить доступ к идентификатору поездки = 1, чтобы путешественники имели идентификаторы 1, 2, 3 и 4. То же самое, где идентификатор поездки = 2 с одинаковыми идентификаторами путешественника.
Myкод работает в настоящее время, но он создает 8 записей TripTravellers в моей БД, как это:
=> #<ActiveRecord::Associations::CollectionProxy [#<TripTraveller id: 94, trip_id: 1, traveller_id: 1, order_id: 24, created_at: "2019-11-09 06:07:18", updated_at: "2019-11-09 06:07:18">, #<TripTraveller id: 95, trip_id: 1, traveller_id: 2, order_id: 24, created_at: "2019-11-09 06:07:18", updated_at: "2019-11-09 06:07:18">, #<TripTraveller id: 96, trip_id: 1, traveller_id: 3, order_id: 24, created_at: "2019-11-09 06:07:18", updated_at: "2019-11-09 06:07:18">, #<TripTraveller id: 97, trip_id: 1, traveller_id: 4, order_id: 24, created_at: "2019-11-09 06:07:18", updated_at: "2019-11-09 06:07:18">, #<TripTraveller id: 98, trip_id: 2, traveller_id: 1, order_id: 24, created_at: "2019-11-09 06:07:18", updated_at: "2019-11-09 06:07:18">, #<TripTraveller id: 99, trip_id: 2, traveller_id: 2, order_id: 24, created_at: "2019-11-09 06:07:18", updated_at: "2019-11-09 06:07:18">, #<TripTraveller id: 100, trip_id: 2, traveller_id: 3, order_id: 24, created_at: "2019-11-09 06:07:18", updated_at: "2019-11-09 06:07:18">, #<TripTraveller id: 101, trip_id: 2, traveller_id: 4, order_id: 24, created_at: "2019-11-09 06:07:18", updated_at: "2019-11-09 06:07:18">]>
И я считаю, что трудно перебрать их все, и, вероятно, не оптимально иметь столько записей для одногоодин отдельный ордер.
Я думал о сохранении их в виде массива в моей БД, для случая, подобного этому TripTraveller (id: 1, trip_id: 1, traveller_id: [1, 2, 3, 4])и то же самое, где trip_id: 2, но я не знаю, как это сделать, и яслышал, что не самая лучшая идея хранить массивы в Join Model.
Что вы, ребята, думаете, что я должен сделать, чтобы улучшить свой код? Заранее спасибо!