我有2个苹果:
{
id: 1,
rotten: true,
branch_on_tree: nil,
type: "red delicious"
},
{
id: 2,
rotten: nil,
branch_on_tree: 5,
type: "red delicious"
}
它们是重复的苹果红色美味。如何将记录合并在一起然后删除缺少数据的记录?有没有方便的方法呢?
注意:可能有10个重复项。我不想在我的最终记录中有任何空值。非空值优先。
答案 0 :(得分:1)
不是很方便,但它会起作用
假设苹果是一个数组:
[
{
id: 1,
rotten: true,
branch_on_tree: nil,
type: "red delicious"
},
# ...
]
可以来自:
apples = Apple.where(type: "red delicious")
apples_attrs = apples.map(&:attributes)
然后,
apple_attrs = apples_attrs.reduce do |apple, next_apple|
apple.merge(next_apple) do |_, old_value, new_value|
old_value || new_value
end
end
apples.destroy_all
Apple.create(apple_attrs)
您可能需要查看本指南https://apidock.com/ruby/Hash/merge
答案 1 :(得分:0)
假设type
始终具有某些值,您可以将DISTINCT
与where
子句一起使用。以下应该有效
Apple.where('rotten IS NOT NULL AND branch_on_tree IS NOT NULL').select('DISTINCT ON (type) rotten,branch_on_tree,type').take