我是Ruby on Rails的新手。我有一个连接到twitter的简单应用程序。该应用程序在主页上有一个搜索文本框和一个提交按钮。还有一个模型和控制器相同。我想在twitter上动态搜索一些关键字,然后在我们的应用程序的主页上显示它们。我在“index.html.erb”页面中创建了一个文本框和提交按钮。我不知道如何获取关键字并传递给控制器。然后我想显示搜索结果。任何人都可以举例说明一个例子吗?请建议代码中的错误/更改。喜欢这个红宝石在轨道上
index.html.erb的内容
<h1>Tweets about New Year Resolution</h1>
<tr><td>Enter keyword <input type = "text" name = "keyword"></td></tr>
<tr><td><input type = "submit" value = "SEARCH"></td></tr>
<%= form_tag(tweets/index, :method => "get") do %>
<%= label_tag(:q, "Enter keyword :") %>
<%= text_field_tag(:q) %>
<%= submit_tag("SEARCH") %>
<% 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>
<% end %>
</ul>
</div>
控制器的内容tweets.rb
class TweetsController < ApplicationController
def index
#Get the tweets (records) from the model Ordered by 'twitter_created_at' descending
searchValue = params[:keyword]
if Tweet.count > 0
Tweet.delete_all
end
Tweet.get_latest_new_year_resolution_tweets("iphone")
@tweets = Tweet.order("twitter_created_at desc")
end
end
答案 0 :(得分:0)
你可以学习一个很好的railscast about search forms。
答案 1 :(得分:0)
我注意到的一件事是你的输入字段在HTML中被命名为q
,而你的控制器操作等待params[:keyword]
。尝试更改输入字段:
<%= text_field_tag(:keyword) %>
还应引用表单标记助手中的url:
form_tag("tweets/index", :method => "get")
答案 2 :(得分:0)
<% @tweets.each do |tweet| %>
.......
<%end%>
仅当@tweets至少有一个元素时,才会执行/输出。如果您真的想要检查,请使用
<%if @tweets.empty? %>
随时随地。请不要@ tweet.nil?即使数组为空,也可能返回false。
当您将搜索表单提交给TweetsController时,您将获得Exception。默认情况下,当您通过POST向控制器提交表单时,其“创建”操作/方法或“更新”操作将被调用,而不是您期望的“索引”操作。
您可能需要为该TweetsController定义其他操作;像'搜索'这样的东西;然后你可以使用 form_tag(:action =&gt;“search”,:controller =&gt;“Twitter”,:method =&gt;“get”) 或类似的东西。您还应在routes.rb文件中指定您有通过GET / POST访问的“搜索”资源。
你的TweetsController中的
def search
@tweets= Tweet.where("text LIKE %#{params[:q]}%")
render :action=>"index" #show the home page itself
end