我有一个简单的搜索设置,如果给出了搜索词,它使用 twitter gem api 来获取和保存一些推文。这是我的index
行动HomeController
,效果很好。
def index
Tweet.pull_tweets_from_search(params[:term]) unless params[:term].blank?
@tweets ||= Tweet.latest
@terms = Tweet.terms
end
推文被保存和获取。我的代码有效。但我对此并不满意,因此想对其进行重构:
def index
@tweets ||= params[:term].blank? ? Tweet.latest : Tweet.pull_tweets_from_search(params[:term])
@terms = Tweet.terms
end
但这现在给了我一个错误:
undefined method `content' for #<Twitter::Tweet:0x007fd2b30bcc90>
pull_tweets_from_search
在模型方面,我有一个具有以下方法的关注类:
module ClassMethods
def pull_tweets_from_search(term)
if term
search_and_add(term)
else
latest
end
end
end
latest
在我的模型类中恰好是一个看起来像这样的范围tweet.rb
:
scope :latest, ->{ order("created_at desc").limit(6) }
奇怪的是,这条推文确实是用内容属性保存的。它似乎只在出现内容变量的模板上窒息:
<% @tweets.each do |tweet| %>
<blockquote>
<em><%= parsed_text(tweet.content) %></em>
# ---
更新 获取和保存推文的实际代码如下所示:
def search_and_add(term)
Twitter.search(term, :lang => "en", count:5).results.each do |tweet|
unless exists?(tweet_id: tweet.id)
create!(
term: term,
tweet_id: tweet.id,
content: tweet.text,
screen_name: tweet.user.screen_name
)
end
end
end
当我重构时,这里出了什么问题?当属性确实存在时,为什么我会收到此错误?