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::Status:0x007fac9c80a160 的未定义方法“创建”

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

app/controllers/tweets_controller.rb:7:in `block 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

推文.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_database25 条返回的推文并将其保存到数据库中。这不是一个很好的策略,因为您正在序列化每个Twitter::Status对象并将它们作为 YAML 存储在数据库中。这意味着你失去了使用所有好的 ActiveRecord 助手的能力,而必须在实际使用它们之前反序列化你想要使用的所有对象。更好的策略是创建一个 ActiveRecord 对象,该对象具有与您希望保存的 Twitter::Status 对象相同的属性。然后,您可以将获取的 Twitter::Status 对象映射到新的 ActiveRecord Tweet 对象,并保留使用 ActiveRecord 的所有好处。

我不会说任何关于你的路由结构的事情,除了它肯定没有遵循“Rails”方式,从经验来看,这通常会导致相当多的头痛。

于 2012-07-05T14:57:37.300 回答