2015-04-26 15 views
1

玉傢伙我知道我有很多的新手問題,作爲我的第ROR應用程序的最後幾天走到一起(測試版的最後期限本週三)。一切都很好,除了在測試我的應用程序時遇到的一個呃逆。Ruby on Rails的搜索返回的一切

該應用程序是用於以使它們以處理背景檢查賭場。我有一個申請人模式,申請人有first_name last_name屬性。我希望能夠搜索申請人的我的索引頁,但每當我鍵入名稱進入搜索瀏覽器將返回所有的申請人的新的一頁,不只是一個,我找......

我整個上午都在搜尋互聯網尋找解決方案,但我沒有運氣。

這裏是我的申請人模型

class Applicant < ActiveRecord::Base 
validates_presence_of :first_name, :last_name, :social, :dob 
validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create } 
validates :social, format: {with: /^(\d{3}-?\d{2}-?\d{4}|XXX-XX-XXXX)$/i, :multiline => true, on: :create} 

def self.search(search) 
    if search 
    @applicants = Applicant.find(:all, :conditions => ['first_name LIKE ?', "%#{search}%"]) 
    else 
    @applicants = Applicant.all 
    end 
end 
end 

(對不起,在我的文件窮人縮進它看起來更好) 我的控制器看起來像這樣

 def index 
     @applicants = Applicant.search(params[:search]) 
     end 

我的觀點看起來像

     <section> 
       <%= form_tag("/applicants", method: "get") do %> 
        <%= label_tag(:applicants, "Search for:") %> 
        <%= text_field_tag(:q) %> 
        <br> 
        <%= submit_tag("Search") %> 
       <% end %> 
       <br> 
       </section> 
+0

您是否使用Rails 4?,可以發佈參數日誌嗎? –

回答

0

改變這一行

@applicants = Applicant.find(:all, :conditions => ['first_name LIKE ?', "%#{search}%"]) 

@applicants = Applicant.where("first_name ILIKE ?", "%#{search}%") 

BOOM!

如果您需要進一步的現場配對的幫助下,你可以檢查出我codementor頁https://codementor.io/rubycasts/#reviews和我聯繫尋求幫助。

+0

我首先通過複製和粘貼嘗試了這個解決方案,並且得到了一個語法錯誤「]」,所以我玩弄了[]並使其工作,但它仍然返回所有申請人。感謝您的幫助! – jpstearns

+0

新方法中不應該有任何[] ......不確定你在做什麼,但這已經工作了5到6年,所以我知道它的工作原理。 –

1

這應該工作:

def index 
    @applicants = Applicant.search(params[:q]) 
    end 

因爲你的窗體有這個文本字段:

<%= text_field_tag(:q) %> 

這意味着從文本字段中的值將在PARAMS發[:Q]。

+0

嘿所以我繼續前進,並改變q搜索(有點你說的倒退,但邏輯應該是相同的)但是現在我得到一個運行時錯誤:不支持的符號引用代碼行<%@applicants。每個做|申請人| %>試圖打印符合搜索條件的申請人。謝謝您的幫助! – jpstearns

+0

這甚至意味着什麼....爲什麼沒有幫助谷歌大聲笑... – jpstearns

+0

您正在使用哪個查詢? 如果您使用的Applicant.where(「FIRST_NAME ILIKE?」,「%#{}搜索%」]),這是建議由RUBYCASTS.IO則評論可能導致問題,因爲ILIKE操作器是專用用於postgresql數據庫。 如果您正在使用該查詢並且未使用postgres數據庫,請嘗試在查詢中將ILIKE更改爲LIKE。 –