0

我是 Ruby on Rails 的新手。我有一个连接到 twitter 的简单应用程序。该应用程序在主页上有一个搜索文本框和一个提交按钮。还有一个模型和控制器。我想在twitter上动态搜索一些关键字,然后将它们显示在我们应用程序的主页上。我在“index.html.erb”页面中创建了一个文本框和提交按钮。我不知道如何获取关键字并传递给控制器​​。然后我想显示搜索结果。任何人都可以找到相同的示例吗?请建议代码中的错误/更改。像这样的 ruby​​ on rails

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
4

3 回答 3

0

我注意到的一件事是您的输入字段以qHTML 命名,而您的控制器操作正在等待params[:keyword]。尝试更改输入字段:

<%= text_field_tag(:keyword) %>

表单标签助手中的 url 也应该被引用:

form_tag("tweets/index", :method => "get")
于 2012-07-31T06:45:31.093 回答
0
   <% @tweets.each do |tweet| %>

     .......

   <%end%>

只有当@tweets 至少有一个元素时才会执行/输出。如果您真的想进行检查,请使用

   <%if @tweets.empty? %>

哪里都行。请不要说@tweet.nil?即使数组为空,也可能返回 false。

当您将搜索表单提交给 TweetsController 时,您将获得异常。默认情况下,当您通过 POST 向控制器提交表单时,它的“创建”操作/方法或“更新”操作不会像您期望的那样被称为“索引”操作。

您可能需要为该 TweetsController 定义额外的操作;类似“搜索”的东西;然后你可以使用 form_tag(:action=>"search" , :controller=>"Twitter", :method => "get") 或类似的东西。您还应该在 routes.rb 文件中指定您有一个通过 GET/POST 访问的“搜索”资源。

在你的推文控制器中

    def search

       @tweets=  Tweet.where("text LIKE %#{params[:q]}%")
       render :action=>"index" #show the home page itself
    end
于 2013-05-10T03:45:31.150 回答
0

有一个关于搜索表单的不错的 railscast,您可以从中学习。

如果您想避免数据库访问,您也可以从thisthisthis中学习。

于 2012-07-31T06:41:19.017 回答