Rails使用重复元素保存数组

时间:2016-04-12 00:12:48

标签: ruby-on-rails ruby

我用多个元素填充数组(其中一些是等于的,这就是我想要的)。我的代码是这样的:

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时,他不会向我显示像我保存在控制器上的重复元素。发生了什么事?

1 个答案:

答案 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"?

目前的实施:

<<方法不允许重复输入。它过滤掉了重复项。它基本上与productsorder有关,因为order可以通过products有多个some_table。它不能将productorder相关联两次。

我的建议是,创建一个名为string的{​​{1}}字段(列)并添加序列化的产品ID数组。

products

访问你时反序列化。