2016-09-02 12 views
0

私はTwitterの宝石を使ってデータベースにつぶやきについてのデータを入力しています。私は次のバリデーションvalidates :link, uniqueness: trueを設定し、私のモデルに既に存在するつぶやきを満たしたときにスクリプトを停止させます。Rails - 私のデータベースにスクリプトをポピュレートさせて停止させる

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 

私は私のモデルで唯一の新しいツイートを作成保つために私のスクリプトが欲しい:

は、ここに私のモデルです。

ありがとうございました!

答えて

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

@Ravi Mariya、ありがとうございます! – Eric

0

使用

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  

これはあなたを助けることを願っています!

+0

好きなときやつぶやきが増えるとどうなりますか? –

+0

これはそれらのエントリを作成します – SpunkyLive

+0

ありがとう@SpunkyLive! – Eric

0

データベースに既に入っているツイートを保存したくない場合は、!を削除するだけですが、それは発生せずエラーになりますが、類似の値とリッチートの変更は保存されません値。

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

もう一つの方法は、リンクがデータベースに既に存在するかどうかをテストするfind_or_create_byを使用することです。

この方法では、すでにデータベースにあるレコードを編集し、ツイートは新しい量とリッツウエット量で更新されます。

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

あなたの助けに感謝@lassvi! – Eric

関連する問題