我创建了一个 Ruby on Rails 应用程序并集成了 twitter。但是我在运行它时遇到了一些问题。我有一个带有搜索框和提交按钮的索引页。应用程序尝试搜索在 twitter 上输入的关键字,然后将其动态显示在应用程序页面(用于动态显示推文的 create.html.page)上。所以有一个“推文控制器”和两个 html.erb 文件。“Index.html.erb”、“create.html.erb”。和一个模型。控制器中的 index 方法用于使用特定关键字显示提要(您可以说是静态方式)。create 方法用于动态显示推文基于在 index.html.erb 中输入的关键字。我想避免使用 form_for 或 form_tag 所以使用 html 表单标签创建了一个表单。
当我尝试执行 url "http:localhost:3000/tweets/create" 时,它显示一个错误,该符号作为数组索引 当我尝试执行 url "http:localhost:3000/tweets/index" 时,页面不是呈现。请帮忙。我正在发布控制器,以下视图。
谢谢,巴尔加夫
“索引.html.erb”
<h1>Tweets about New Year Resolution</h1>
<form action="/create" method="post">
<label for="keyword">keyword</label>
<input id="keyword" name="Enter keyword" size="30" type="text" />
<input type="submit" value="search" />
</form>
<% if (@tweets != nil) then %>
print "The tweets are " @tweets
<% else %>
print "No tweets for the keyword"
<% end % >
<div id="container">
<ul>
<% @tweets.each do |tweet| %>
<li class="<%=cycle('odd', '')%>">
<%= link_to tweet.from_user, "http://twitter.com/#{tweet.from_user}", :class => "username", :target => "_blank" %>
<div class="tweet_text_area">
<div class="tweet_text">
<%=raw display_content_with_links(tweet.text) %>
</div>
<div class="tweet_created_at">
<%= time_ago_in_words tweet.twitter_created_at %> ago
</div>
</div>
</li>`enter code here`
<% end %>
</ul>
</div>
“创建.html.erb”
<h1>Keywords displayed</h1>
<p> A page to display tweets
</p>
“tweets_controller.rb”
class TweetsController < ApplicationController
def index
#Get the tweets (records) from the model Ordered by 'twitter_created_at' descending
if Tweet.count > 0
Tweet.delete_all
end
Tweet.get_latest_new_year_resolution_tweets("India")
@tweets = Tweet.order("twitter_created_at desc")
end
def create
@tweets = (params [:tweet][:search])
Tweet.get_latest_new_year_resolution_tweets(@tweets)
end
end
模型* tweet.rb * 包含方法 get_latest_new_year_resolution_tweets 。如下。
class Tweet < ActiveRecord::Base
#A method to grab latest tweets from Twitter
def self.get_latest_new_year_resolution_tweets(keyword)
#create a Twitter Search object
search = Twitter::Search.new
#grab recent 100 tweets which contain 'new year resolution' words, and loop each of them
search.containing(keyword).result_type("recent").per_page(100).fetch.each do |tweet_results|
#parsing the string 'created_at' to DateTime object
twitter_created_at = DateTime.parse(tweet_results.created_at)
#making sure we are not saving exact same tweet from a person again
unless Tweet.exists?(['twitter_created_at = ? AND from_user_id_str = ?', DateTime.parse(tweet_results.created_at), tweet_results.from_user_id_str])
#finally creating the tweet record
Tweet.create!({
:from_user => tweet_results.from_user,
:from_user_id_str => tweet_results.from_user_id_str,
:profile_image_url => tweet_results.profile_image_url,
:text => tweet_results.text,
:twitter_created_at => twitter_created_at
})
end
end
end
end