【问题标题】:Array not saving from one model to another in rails阵列未在导轨中从一个模型保存到另一个模型
【发布时间】:2018-12-01 11:21:38
【问题描述】:

我正在尝试将一个包含多个 ID (item_variation_ids) 的数组保存到来自项目变化模型的名为 items_stock 的模型中。在 item_stock 中名为 item_variation_ids 的列中,它将像 [1,2,3] 这样的 id 保存两次。我希望 item_variation_ids 在单列中仅保存一次 1,2,3。 我的 item_variation 模型

#app/models/item_variation
class ItemVariation < ApplicationRecord
  belongs_to :item
  validates_associated :item
  after_save :add_to_item_stock

 def add_to_item_stock
   ItemStock.create(item_variation_ids: ItemVariation.ids, items_id: items_id)
 end
end

我的物品模型

 #app/models/item
 class Item < ApplicationRecord
  has_many :item_variations, foreign_key: :items_id
  has_many :item_stocks, foreign_key: :items_id
  accepts_nested_attributes_for :item_stocks
end

我的 item_stock 模型

#app/models/item_stock
class ItemStock < ApplicationRecord
  belongs_to :item
end

【问题讨论】:

  • 每当您保存任何 ItemVariation 时,您都会创建一个具有所有 ItemVariation id 的 ItemStock。另外,ItemStock 是什么样的?展示你的 3 个模型,items_id 来自哪里?你的意思是item_id?您应该更好地解释您的问题并分享所有相关代码。一个问题之前和之后你在数据库上的例子会更好。
  • 我已经添加了另外两个模型请检查
  • 我不确定 ItemStock 里面有什么。您正在尝试保存item_variations_idsitems_id,但我只看到item_id 的关联。你能解释一个现实生活中的例子吗?每个模型是什么?我猜你使用了错误的关联,但我不确定。
  • @arieljuod 真实例子也在这里stackoverflow.com/questions/53350010/…
  • 嗯,这不是一个真实的例子,这就像你的问题,但有一个 activeadmin 配置和一张图片。你真的应该回答任何人在评论中提出的所有问题。 items_id 在 after_save 回调中来自哪里,您是否知道 ItemVariation.ids 返回数据库上的所有 id 并且您每次都尝试创建一个具有所有 id 的 ItemStock?我仍然不明白你在做什么,我不明白 ItemStock 的使用,因为它只有一个 belongs_to 项目,不知道你的数据库模式对那个 item_variations_ids 有意义(为什么不是 has_many?)

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-5 rails-activerecord


【解决方案1】:

但是你怎么知道哪些 ItemVariation id 应该放在那个 ItemStock 上?每次保存任何变体时,您都会创建一个 ItemStock。我什至认为您不需要设置该 ids 数组,因为 ItemStock 已经属于具有多种变体的 Item (@item_stock.item.variations,您就完成了)。

此外,现在您正在谈论您以前从未提及的stock_qty 属性,您从未在回调中设置它并且您没有显示您的数据库架构。那数额是从哪里来的?是您想要汇总到当前 item_stock 的变体属性吗?

我也不明白为什么一个项目有很多你显示的代码的项目库存。

我会做一个疯狂的猜测,并建议你做这样的事情:

ItemStock
  belongs_to :item
  belongs_to :item_variation
end

ItemVariation
  after_save :add_to_item_stock

  def add_to_item_stock
    item_stock = self.item.item_stock.where(item_variation_id: self.id).first_or_initialize
    item_stock.stock_qty = self.stock_qty
    item_stock.save
  end
end

但正如我所说,这是一个非常荒谬的猜测。我建议您首先尝试了解您在做什么,因为您似乎只是从您链接的问题中复制到代码中,而您实际上并没有理解它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2013-10-13
    • 2015-02-27
    • 1970-01-01
    • 2021-03-26
    • 2020-06-15
    相关资源
    最近更新 更多