我们需要允许用户自定义他们的实体,例如产品...所以我的意图是拥有一个产品表和一个 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/