gpt4 book ai didi

mysql - 使用 Active Record 和 Mysql 合并 2 个表的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-29 00:23:14 25 4
gpt4 key购买 nike

我们需要允许用户自定义他们的实体,例如产品...所以我的意图是拥有一个产品表和一个 custom_product 表,其中仅包含允许用户更改的信息。

当客户转到我要合并信息的产品时,意味着我要合并两个表 - 自定义覆盖默认的 Products 表。

我知道在 mysql 中存在一个 ifnull(a.title, b.title) 方法,但我想知道在 Rails 4 中使用 Active Record 是否有任何好的和有效的方法来解决这个问题。假设产品和定制产品表只有 2 列,ID 和 TITLE

最佳答案

我认为您可以将两个对象都转换为 JSON,然后使用 merge 方法将它们的参数作为散列处理:

class Product
end

class Customization
belongs_to :product
end


a = Product.find(...)
b = a.customization

c = JSON(a.to_json).merge(JSON(b.to_json).reject!{|k,v| v.nil?})

因此 c 将包含来自 Product 的所有参数,这些参数最终会被 Customization 中的参数覆盖,这些参数不是 nil。

如果您仍想使用具有混合值(取自Customization)的Product 对象,您可以试试这个:

a.attributes = a.attributes.merge(b.attributes.reject!{|k,v| v.nil?})

在这种情况下,a 仍然是一个 Product 实例。我建议在执行此操作时在两个模型中保留相同的属性。

关于mysql - 使用 Active Record 和 Mysql 合并 2 个表的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20269269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com