2017-06-22 83 views
0

我有2個蘋果:如何合併2個activerecord記錄並保留1? Rails的

{ 
id: 1, 
rotten: true, 
branch_on_tree: nil, 
type: "red delicious" 
}, 
{ 
id: 2, 
rotten: nil, 
branch_on_tree: 5, 
type: "red delicious" 
} 

他們是美味可口的紅蘋果式兩份。如何合併記錄,然後刪除缺少數據的記錄?有沒有一個方便的方法來做到這一點?

注意:可能有10個重複項。我不希望我的最終記錄中有任何空值。非空值優先。

+0

是'type'總是有一些價值嗎? – Pavan

+0

此外,你想要一個記錄或多個記錄,爲您的目的嗎? – Pavan

+0

我想留下一個記錄,刪除所有重複項(coiuld爲10)。 – Jwan622

回答

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

0

假設type總是有一定的價值,你可以使用DISTINCTwhere子句。下面應該工作

Apple.where('rotten IS NOT NULL AND branch_on_tree IS NOT NULL').select('DISTINCT ON (type) rotten,branch_on_tree,type').take