2012-07-31 59 views
0

我是Ruby on Rails的新手。我有一個簡單的應用程序連接到Twitter。該應用程序在主頁上有一個搜索文本框和一個提交按鈕。同樣還有一個模型和控制器。我想在twitter上動態搜索一些關鍵字,然後將它們顯示在我們應用程序的主頁上。我在「index.html.erb」頁面中創建了一個文本框並提交按鈕。我不知道如何取得關鍵字並傳入控制器。然後我想顯示搜索結果。任何人都可以爲同樣的網站舉例嗎?請建議代碼中的錯誤/更改。像 - 這Ruby on Rails的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 
+0

我想你應該改變'searchValue =參數[:關鍵字]''到searchValue =參數[:Q]'搶輸入,並刪除'TD/tr'部分 – Bohdan 2012-07-31 06:43:06

回答

0

我注意到的一件事是您的輸入字段在HTML中被命名爲q,否則您的控制器操作將等待params[:keyword]。嘗試改變輸入字段:

<%= text_field_tag(:keyword) %> 

在形式標籤輔助URL應被引用,以及:

form_tag("tweets/index", :method => "get") 
+0

感謝你的回答。我還需要在那裏做一些改變嗎? – bhargav 2012-07-31 07:06:33

+0

如果你指的是form_tag helper:是的。我期望該視圖會引發異常,否則。 – iltempo 2012-07-31 07:13:31

+0

我想刪除代碼中的腳本 <%= form_tag(tweets/index,:method =>「get」)do%> <%= label_tag(:q,「Enter keyword:」)%> < %= text_field_tag(:q)%> <%= submit_tag(「SEARCH」)%> <% end %> 並使用普通的html。還想在index.html.erb中添加一個條件,只有當對象不是空值時才應該顯示數據。請幫助一樣。 – bhargav 2012-07-31 09:58:28

0
<% @tweets.each do |tweet| %> 

    ....... 

    <%end%> 

將被執行/輸出僅當@tweets具有至少一個元件。如果你真的想檢查,然後使用

<%if @tweets.empty? %> 

無論你想要的。請不要那@ tweet.nil?即使數組爲空也可能返回false。

你要當您提交搜索表單TweetsController得到異常。默認情況下,當您通過POST將表單提交給控制器時,其「創建」操作/方法或「更新」操作不像您期望的那樣被稱爲「索引」操作。

您可能需要爲TweetsController的定義附加動作;像'搜索';然後,可以選擇使用 的form_tag(:動作=> 「搜索」,:控制器=> 「推特」,:方法=> 「GET」) 或類似的東西。你還應該指定你有一個通過GET/POST訪問的'搜索'資源)在routes.rb文件中。

在TweetsController

def search 

     @tweets= Tweet.where("text LIKE %#{params[:q]}%") 
     render :action=>"index" #show the home page itself 
    end