我想将推文保存到数据库中,但它不起作用!我正在使用twitter gem。
我的控制器:
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
显示以下错误:
未定义的方法`create'for 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:在'each'
中app / controllers / tweets_controller.rb:5:在`save_tweets_into_database'
答案 0 :(得分: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
答案 1 :(得分: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
请注意,这需要您进行迁移,其中使用名为“twitter_tweet”的文本列创建tweets
表,例如
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帮助程序,而是必须在实际使用它们之前反序列化您要使用的所有对象。更好的策略是创建一个ActiveRecord对象,该对象具有与要保存的Twitter :: Status对象中的属性相同的属性。然后,您可以将获取的Twitter :: Status对象映射到新的ActiveRecord Tweet对象,并保留使用ActiveRecord的所有好处。
我不会对你的路由结构说些什么,除了它肯定不会遵循'Rails'的方式,从经验来看,这通常会导致相当多的麻烦。