定期的に最新のつぶやきを特定のハッシュタグで取り出し、ローカルに保存します。重複を避けるために、以下の方法を使用します。残念ながら、このコードで間違っているので、何...動作していないようです:@tweetsがさえずるの配列は、Twitterからフェッチオブジェクトである保存する前に配列から複製を削除する
def remove_duplicates
before = @tweets.size
@tweets.delete_if {|tweet| !((Tweet.all :conditions => { :twitter_id => tweet.twitter_id}).empty?) }
duplicates = before - @tweets.size
puts "#{duplicates} duplicates found"
end
を。私は、特により洗練されたものと思われるソリューションをお試しいただければ幸いです。
validate_uniqueness_of:twitter_idそれは良い解決策ではありません。レコードの存在をチェックしてから新しいレコードを作成するまでの間に、別のプロセスが複製を作成する可能性があります。このメソッドは、常にデータベースインデックスと組み合わせて使用する必要があります。 –
@weppos:つづれているつもりのつぶやきしかないので、これは問題ではありません。これは、ほとんどの "DRY"ソリューションのようです。 sqlite3ではうまく動作しましたが、本番モード/ mysqlでは重複を気にするようには見えませんでした。 – effkay
実際の安全のためには、データベースに一意性制約を設定し、スローされた例外を処理する準備が整うようにしてください。 –