【问题标题】:What is the best way to merge 2 tables with Active Record and Mysql将 2 个表与 Active Record 和 Mysql 合并的最佳方法是什么
【发布时间】:2013-11-28 15:02:06
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我认为您可以将两个对象都转换为 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 中不为零的参数覆盖。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2012-03-26
      • 2010-12-23
      • 1970-01-01
      • 2020-11-26
      • 2018-07-16
      相关资源
      最近更新 更多