【问题标题】:Rails - Prevent post request creating multiple rows from an array whilst still keeping the dataRails - 防止发布请求从数组创建多行,同时仍保留数据
【发布时间】:2017-02-23 18:39:20
【问题描述】:

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

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 数组和获取要存储的变体标题。

它工作得很好,但是当我实际上希望它给我一个包含所有项目的订单时,这当然会为订单中的每个项目创建一个新行。

这是将我的表列转换为哈希数组的情况吗?还是我错过了另一种方法?

【问题讨论】:

  • 你要的数据是params[:line_items]。如果您希望它保留但不想要单个记录,您可以将整个哈希存储在数据库中的字段中,前提是 (a) 您的数据库支持 JSON 结构或 (b) 您使用将自动转换的 serialize rails 功能将哈希值转换为字符串,并在您读取记录时将其转换回来。就个人而言,您最好使用 Order 模型,该模型在 OrderItem(order_items 表)中包含 has_many 条目,
  • params[:line_items] 返回一个数组(不同的哈希值),其中每个订单项的信息以哈希格式显示,这仍然有效吗?
  • 是的,但是看看@gokulm 的回答。

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


【解决方案1】:

您可以使用以下关系创建两个模型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

【讨论】:

    【解决方案2】:

    我对 shopyify 不是很熟悉,但您的问题似乎与您正在为每个订单项创建一个新对象这一事实有关,因为您将 Transaction.new 调用放置在何处。另一种组织方式是为订单项设置另一个表格。您可以将此行项目的哈希存储在数据库中,但您可能希望根据行项目进行某种查询,并为每个事务执行序列化此列的过程不是一个省时的解决方案.悟空的解决方案与我所指的基本一致

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 2019-10-05
      • 2016-12-11
      • 2020-10-16
      相关资源
      最近更新 更多