我刚接触Rails。 我有这个旅行预订网站,该网站具有正常运行的购物车系统。我试图将购物车中的所有内容发送到我的订购模型,以便用户可以看到他们订购的产品。 基本上,每个用户都可以预订多个旅行,每个旅行可以有多个旅行者。
这是我的代码:
参数:
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
例如,在这种情况下,我要实现的目标是能够访问旅行ID = 1的地方,让旅行者拥有ID 1、2、3和4。 行程ID = 2时相同,旅行者ID相同。
我的代码当前有效,但是它在数据库中创建了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,traveller_id: 2,#<TripTraveller id: 96,traveller_id: 3,#<TripTraveller id: 97,traveller_id: 4,#<TripTraveller id: 98,trip_id: 2,#<TripTraveller id: 99,#<TripTraveller id: 100,#<TripTraveller id: 101,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中不是最好的主意。
你们认为我应该怎么做才能改进我的代码? 预先感谢!