2013-07-02 61 views
1

我正在使用導軌來搜索所需的結果。我有一個名爲座標表,我想對於一個搜索表單,我model.rb無法在導軌3中搜索數據庫中的查詢

class Coordinates<ActiveRecord::Base 
    attr_accessible :city , :latitude, :longitude 
end 

coordinates_controller.rb

class CoordinatesController<ApplicationController 
    def show 
    @coordinates=Coordinates.where("city = ?", params[:search]).all 
    end 
end 

index.html.erb

<%= form_tag({controller: "coordinates", action: "show"}, method: "get") do %> 
<%= label_tag(:coordinates,"search for:") %> 
<%= text_field_tag(:show) %> 
<%= submit_tag("search") %> 
<% end %> 

search.html.erb

<%= form_for @coordinates.search do |coordinates| %> 
    <ul> 
    <li><%= coordinates.latitude %></li> 
    <li><%= coordinates.longitude %></li> 
    <li><%= coordinates.longitude %></li> 
    </ul> 
<% end %> 

,但我收到此錯誤:

undefined method `search' for []:Array

..請幫助

+1

您想在'search.html.erb'中執行什麼操作?你想查看已過濾的「@座標」嗎? –

+0

in search.html.erb我想顯示搜索結果。即如果一個城市在搜索框中輸入,我想顯示所有匹配結果,例如,如果班加羅爾輸入它應該顯示班加羅爾的緯度,經度已經在表 – user2492854

+0

所以按照@薩利爾的答案。 –

回答

2

首先,嘗試改變index.html.erb形式代碼:

<%= form_tag({controller: "coordinates", action: "show"}, method: "get") do %> 
    <%= label_tag(:coordinates,"search for:") %> 
    <%= text_field_tag(:show) %> 
    <%= submit_tag("search") %> 
<% end %> 

要:

<%= form_tag({controller: "coordinates", action: "show"}, method: "get") do %> 
    <%= label_tag(:search,"search for:") %> 
    <%= text_field_tag(:search) %> 
    <%= submit_tag("Search") %> 
<% end %> 

這將使用文本字段的值填充params [:search]。目前,您將傳遞查詢爲params [:show]。

接下來,請嘗試更改您的搜索結果中查看到:

<% @coordinates.each do |coordinates| %> 
    <ul> 
    <li><%= coordinates.latitude %></li> 
    <li><%= coordinates.longitude %></li> 
    <li><%= coordinates.longitude %></li> 
    </ul> 
<% end %> 

這遍歷由控制器返回的@coordinates集合。

+0

試過也。它表示未定義的方法'each'in nil:Nilclass – user2492854

+0

@ user2492854你確定你把這個代碼放在正確的位置嗎? –

+0

因爲@座標= Coordinates.where(「city =?」,params [:search]),所以你沒有辦法將'@ coordinates'作爲'nil'。所有'將始終返回數組 – Salil

1

從線 未定義的方法「各」未繳:Nilclass

似乎有適合您的通話 @座標=座標後,尋找你的數據庫

城市沒有座標。其中(「城市=?」,則params [:搜索])。所有

檢查@coordinates.nil?@coordinates.count,看看是否是這種情況 而在它旁邊是一個更好的做法,使用前檢查 - 這樣你就可以處理它以你想要的方式 - 如果數據庫中出現問題,並且您不希望用戶在生產中出現此類錯誤

+0

您確定如果沒有座標爲城市,那麼'@coordinates=Coordinates.where(「city =?」,params [:search])。all'將返回'nil'? – Salil