Выполните итерацию по нескольким параметрам и сохраните их в таблице соединений HM BT - PullRequest
0 голосов
/ 09 ноября 2019

Я относительно новичок в рельсах. У меня есть этот сайт бронирования путешествий с функционирующей системой корзины. Я пытаюсь отправить все, что есть в моей корзине, в мою модель заказа, чтобы пользователи могли видеть, что они заказали. По сути, каждый пользователь может забронировать несколько поездок, в которых может быть несколько путешественников.

Вот мой код:

Параметры:

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.

Что вы, ребята, думаете, что я должен сделать, чтобы улучшить свой код? Заранее спасибо!

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