Rails新手。我正在编写一个应用程序,使用sferik Twitter gem来提取Twitter用户时间轴,遍历时间轴并将每个推文写入模型/表。我可以将用户时间轴变为哈希,但是当我尝试迭代(例如tweet.each do ..)并保存每条推文时,应用程序只保存哈希中的最后一条推文,而不是每条推文。我试图做一个嵌套循环,但在二级迭代中得到一个未定义的“each”方法。以下代码,欢迎所有建议。
Rails 3,PostgreSQL,Twitter gem。
**Controller**
**class TweetController < ApplicationController**
require 'twitter'
**def tweet**
@tweet = Tweet.new
@tweeters = User.tweeters.all #get twitter users in my application
client = Twitter::REST::Client.new do |config|
config.consumer_key = secret
config.consumer_secret = secret
config.access_token = secret
config.access_token_secret = secret
end
@tweeters.each do |element| *#for each user get tweets to insert into the model*
@tweet.user_id = element.id
@tweet.screen_name = element.screen_name
@content = client.user_timeline(element.twitter_id, :since_id => element.tweet_since_id).reverse
@content.each do |post| *#if I return 4 twitter posts this loop only inserts the last post*
if post.id > element.tweet_since_id
element.tweet_since_id = post.id
@tweet.content = post.text
@tweet.save
end
end
end
end
所以“@ content.each do | post |” section不会遍历每条推文并插入4条不同的记录,它只会插入最后一条记录。我已经尝试了以下各种形式,并收到“未定义的每个Twitter ID方法......”
@content.each do |post|
post.id.each do |t|
if t.id > element.tweet_since_id
element.tweet_since_id = t.id
@tweet.content = t.text
@tweet.save
end
end
有任何想法或建议吗?
答案 0 :(得分:0)
这是因为您将数据存储到单个@tweet
记录中,您还需要在@tweet.save
之后创建一个新记录,以便新数据不会覆盖旧数据。做类似的事情:
@content.each do |post|
if post.id > element.tweet_since_id
@tweet = Tweet.new :screen_name => element.screen_name, :content => post.text
@tweet.user_id = element.id
@tweet.save
element.tweet_since_id = post.id
end
end
请注意,视图something_id
的记录字段属于您的数据库中的其他记录类型是好的样式,如果您没有与该字段关联的记录,请使用另一个命名,例如{{ 1}}或something_xid
。