2016-09-02 2 views
0

Ich benutze das Twitter-Juwel, um meine Datenbank mit einigen Daten über Tweets zu füllen. Ich habe die folgende Validierung eingerichtet validates :link, uniqueness: true und es bewirkt, dass mein Skript beendet wird, wenn es Tweets trifft, die bereits in meinem Modell vorhanden sind.Rails - Validierungen machen meine Datenbank Populations-Skript zu stoppen

Hier ist mein Modell:

class Twit < ApplicationRecord 
validates :link, uniqueness: true 

def self.get_tweets user 
    all_tweets = CLIENT.user_timeline(user, count: "30", exclude_replies: true, include_rts: false) 
    all_tweets.each do |tweet| 
    Twit.create!(content: "#{tweet.text}", link: "#{tweet.uri}", like: "#{tweet.favorite_count}", retweet: "#{tweet.retweet_count}", first_date: "#{tweet.created_at}") 
    end 
end 

end 

ich mein Skript möchten halten nur neue Tweets in meinem Modell zu schaffen.

Vielen Dank!

Antwort

0
use `find_or_create_by` instead of create like 
Twit.find_or_create_by(content: "#{tweet.text}") do |twit| 
    twit.link = 'xxxxx' 
end 
+0

Vielen Dank @Ravi Mariya, es funktioniert! – Eric

0

Verwenden

def self.get_tweets user 
    all_tweets = CLIENT.user_timeline(user, count: "30", exclude_replies: true, include_rts: false) 
    all_tweets.each do |tweet| 
    Twit.where(
     content: "#{tweet.text}", 
     link: "#{tweet.uri}", 
     like: "#{tweet.favorite_count}", 
     retweet: "#{tweet.retweet_count}", 
     first_date: "#{tweet.created_at}" 
    ).first_or_create! 
    end 
end  

Hoffnung das wird Ihnen helfen!

+0

Was passiert, wenn Like und Re Tweet zunehmen? –

+0

Dadurch werden diese Einträge – SpunkyLive

+0

Vielen Dank @SpunkyLive! – Eric

0

Wenn Sie nur nicht wollen, dass die Tweets, die bereits in der Datenbank gespeichert ist, können Sie nur entfernen !, dann wird es nicht erhöhen und Fehler, aber es speichert keine Änderungen an den gleichen Wert und das Retweet Wert.

Twit.create(content: "#{tweet.text}", link: "#{tweet.uri}", like: "#{tweet.favorite_count}", retweet: "#{tweet.retweet_count}", first_date: "#{tweet.created_at}") 

Ein anderer Weg ist find_or_create_by zu verwenden, um zu testen, ob die Verbindung bereits in der Datenbank ist.

Auf diese Weise bearbeiten Sie den Datensatz, der bereits in der Datenbank vorhanden ist, und der Tweet wird mit dem neuen Betrag und Retweet-Betrag aktualisiert.

all_tweets.each do |tweet| 
    twit = Twit.find_or_create_by(link: tweet.uri) 
    twit.content = tweet.text 
    twit.like = tweet.favorite_count 
    twit.retweet = tweet.retweet_count 
    twit.first_date = tweet.created_at 
    twit.save 
end 
+0

Schätzen Sie Ihre Hilfe @lassvi! – Eric

Verwandte Themen