정기적으로 특정 해시 태그로 최신 트윗을 가져 와서 로컬로 저장합니다. 중복을 방지하기 위해 아래 방법을 사용합니다. 불행하게도,이 코드를 잘못 그래서 뭐 ... 작동하지 않는 것 : @tweets이 트윗의 배열이 트위터에서 가져온 객체입니다저장하기 전에 배열에서 중복을 제거하십시오.
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
을 사용하려면 데이터베이스에 고유성 제약 조건을 넣고 throw 된 예외를 처리 할 준비가되어 –