我们需要允许用户自定义他们的实体,例如产品...所以我的目的是拥有一个产品表和一个custom_product表,其中只包含允许用户更改的信息。
当客户端转到产品我要合并信息时,意味着我要合并两个表 - 自定义覆盖默认的Products表。
我知道在mysql中存在一种ifnull(a.title,b.title)方式,但我想知道是否有任何一种好的有效方法可以在Rails 4中使用Active Record解决这个问题。假设产品和定制产品表只有2列,ID和TITLE
答案 0 :(得分:1)
我认为您可以将两个对象转换为JSON,然后使用merge
方法将其params作为哈希处理:
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
个实例。我建议在这两个模型中保持相同的属性。