Rails - 防止发布请求从数组创建多行,同时仍保留数据

时间:2016-10-14 10:48:15

标签: ruby-on-rails arrays ruby ruby-on-rails-4 hash

我将从我的控制器创建动作开始:

def create
    this_order = params[:line_items]
    this_order.each do |this|
        @order = Transaction.new
        @order.shopifyid = params[:id]
        @order.vartitle = this['variant_title']
        @order.save
    end
end

如果您不熟悉ShopifyAPI,这只是查看订单JSON并在我的交易表中创建每个订单的内部行,此时它只是存储订单ID然后进入line_items数组并且获取变量标题以存储它。

它工作正常,但当然这会为订单中的每个项目创建一个新行,而我实际上希望它给我一个包含其中所有项目的订单。

这是将我的表列转换为哈希数组的情况吗?或者我错过了另一种方法来做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以使用以下关系创建两个模型TransactionItem

<强>交易

has_many :items

<强>物品

belongs_to :transaction

您的控制器操作:

def create
    @order = Transaction.new
    @order.shopifyid = params[:id]
    this_order = params[:line_items]
    this_order.each do |this|
        @order.items.new( #Item attributes )
    end
    @order.save
end

我认为通过这种方式,你可以在项目表中拥有variant_title

答案 1 :(得分:0)

我对shopyify不是很熟悉,但似乎您的问题与您为每个订单项创建一个新对象这一事实有关,因为您在哪里放置了Transaction.new调用。另一种组织方式就是为订单项添加另一个表。您可以将这些行项目的哈希值存储在数据库中,但是您可能希望根据行项目进行某种类型的查询,并且为每个事务执行序列化此列的过程不是时间有效的解决方案。悟空的解决方案与我指的是