我用多个元素填充数组(其中一些是等于的,这就是我想要的)。我的代码是这样的:
def create
@order = Order.create()
@order.table = Table.find_by(:number => params['table'][0])
@products ||= []
@qtd = []
Product.all.each do |product|
params['order'].each_pair do |ordered|
if(product.id.to_s == ordered.first)
for i in 0..ordered.second[0].to_i
@order.products << product
@order.save
end
end
end
end
binding.pry #here the @order.products is the way I want to
if @order.save
flash[:success] = "Pedido criado com sucesso."
redirect_to tables_path
else
flash[:danger] = "Erro ao criar pedido."
render :new
end
end
但是当我进入rails console并执行Order.last.products时,他不会向我显示像我保存在控制器上的重复元素。发生了什么事?
答案 0 :(得分:1)
在您的情况下,您应该从客户端向服务器发送订单信息,如
"order"=>{"line_items_attributes"=>{"0"=>{"quantity"=>"4", "id"=>"127"}}}
您应该在系统中实现product
的概念,而不是重复列表中的line items
ID。 Line Items
是表示添加到购物车中的商品的对象,而不是重复product_id
您可以使用商品quantity
。
现在您可以拥有名为LineItem
的单独模型。 Order
可以包含多个LineItem
个。 LineItem
有很多products
。
有关详细信息,请参阅What is a "order line"?
目前的实施:
<<
方法不允许重复输入。它过滤掉了重复项。它基本上与products
和order
有关,因为order
可以通过products
有多个some_table
。它不能将product
与order
相关联两次。
我的建议是,创建一个名为string
的{{1}}字段(列)并添加序列化的产品ID数组。
products
访问你时反序列化。