私はUserモデルとLocation Modelを持っています。各ユーザは、ロケーションモデルの特定の場所に属します。複数の場所の代わりに特定の場所にすべてのユーザーを誘導し、重複を削除するためのrubyコード
ロケーションテーブルに重複した場所があります。 とユーザーが所在地に属しています。 どのように私は場所テーブル内の重複する行を削除し、1つの行を保持し、すべてのユーザーがその単一の行に属しているルビーを使用することができます。どちらのテーブルもlocation_ID属性で接続されています。
私は、移行を介してこれを実行しようとしました:
def dedupe(model, *key_attrs)
model.select(key_attrs).group(key_attrs).having('count(*) > 1').each { |duplicates|
dup_rows = model.where(duplicates.attributes.slice(key_attrs)).to_a
# the first one we want to keep right?
first_one = dup_rows.shift #stored the first one
dup_rows.each{ |double| double.destroy } # duplicates can now be destroyed
}
end
しかし、実行するための移行をさせない、ユーザーの外部キー制約があります。どうすればこれを達成できますか?
User
user_id name location_id
1 tim 1
2 adam 2
3 Joy 3
Location
location_id name
1 NewYork
2 NewYork
3 NewYork
Expected Ouput:
User
user_id name location_id
1 tim 1
2 adam 1
3 Joy 1
Location
location_id name
1 NewYork
あなたのクエリから期待される出力を示してもらえますか? –
最初のインスタンスまたは最後のインスタンスを保持する場合は重要ですか? 'user_id'と' location'に基づいて一意性だけを気にしますか? –
私は自分の質問を編集しました。それを参照してください。私は重複を削除し、同じ場所を持つユーザーがLocationテーブルの1つのレコードだけを指し示すようにしたい。私はルビーを使用してこれを達成したいと考えています – Abhishek