0

ツイートをデータベースに保存したいのですが、うまくいきません。私はツイッターの宝石を使用しています。

私のコントローラー:

class TweetsController < ApplicationController

def save_tweets_into_database
    @tweets = Twitter.search("#em2012" "#Italy" "#Spain", :lang => "en", :rpp => 25).results
    @tweets.each do |tweet|
        @tweet = tweet
        @tweet.create
    end
end
end

私のモデル

require "rubygems"
require "twitter"


class Tweet < ActiveRecord::Base

end

私の見解

<% @title = "liste" %>
<h2>Liste der Tweets über das EM-Finale</h2>
<ul>
    <% @tweets.each do |tweet| %>
        <li><%= tweet %></li>
    <% end %>
</ul>

私のルート

Em2012tweet::Application.routes.draw do

  match '/save_tweets', to: 'tweets#save_tweets_into_database'
end

次のエラーが表示されます。

Twitter の未定義メソッド「create」::Status:0x007fac9c80a160

Rails.root: /Users/xyz/Desktop/Workspace/em2012tweet

app/controllers/tweets_controller.rb:7:in `save_tweets_into_databaseのブロック'

app/controllers/tweets_controller.rb:5:in `each'

app/controllers/tweets_controller.rb:5:in `save_tweets_into_database'

4

2 に答える 2

2

ツイートをデータベースに保存する

Rails では、REST 規則に従い、indexアクションは単にデータベースに既に格納されているモデルのすべてのオブジェクトを表示することに関連付けられています。そして、これは実際にコードで行ったことでもあります。あなたのアクションは、ツイートをデータベースに保存indexすることは何もしていません。

ここでツイートを保存しようとしているとは思いません。それらを単純に表示しようとしています。インデックス ビュー ファイルにツイートを単純に表示する場合は、これを試してください。

def index
  @tweets = Twitter.search("#em2012" "#italy" "#spain", :lang => "en", :rpp => 25).results
end

ツイートを保存したい場合は、このようなアクションを作成します。

def save_tweets_into_database
  @tweets = Twitter.search("#em2012" "#italy" "#spain", :lang => "en", :rpp => 25).results
  @tweets.each do |tweet|
    Tweet.save(tweet)
  end
end
于 2012-07-04T15:14:26.610 に答える
0

tweets_controller.rb:

class TweetsController < ApplicationController

  def save_tweets_into_database
    @tweets = Twitter.search("#em2012" "#Italy" "#Spain", :lang => "en", :rpp => 25)
    @tweets.each do |tweet|
      Tweet.create(twitter_tweet: tweet)
    end
  end
end

tweet.rb:

class Tweet < ActiveRecord::Base
  serialize :twitter_tweet
end

tweetsこれには、「twitter_tweet」という名前のテキスト列でテーブルが作成される移行が必要であることに注意してください。

class CreateTweets < ActiveRecord::Migration
  def change
    create_table :tweets do |t|
      t.text :twitter_tweets

      t.timestamps
    end
  end
end

save_tweets_into_databaseこれにより、返された25個のツイートを呼び出してデータベースに保存できます。Twitter::Status各オブジェクトをシリアル化し、データベースにYAMLとして保存するため、これはあまり良い戦略ではありません。これは、すべての優れたActiveRecordヘルパーを使用する機能を失い、代わりに、実際に使用する前に、操作するすべてのオブジェクトを逆シリアル化する必要があることを意味します。より良い戦略は、保存したいTwitter::Statusオブジェクトと同じ属性を持つActiveRecordオブジェクトを作成することです。次に、フェッチされたTwitter ::Statusオブジェクトを新しいActiveRecordTweetオブジェクトにマップし、ActiveRecordを使用することのすべての利点を保持できます。

ルーティング構造については何も言いませんが、「レール」の方法に従っていないように見えることは間違いありません。これは、経験上、通常、かなりの数の頭痛の種になります。

于 2012-07-05T14:57:37.300 に答える