Ruby On Rails - 从文本框中检索数据并显示其内容

时间:2012-07-31 06:31:35

标签: ruby-on-rails ruby-on-rails-3

我是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

3 个答案:

答案 0 :(得分:0)

你可以学习一个很好的railscast about search forms

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

答案 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