0

我有一個簡單的搜索方法安裝在我的Rails應用程序,我想在另一個控制器視圖中從ajax調用。Rails搜索3.2返回所有而不是具體的查詢

眼下一個看起來像這樣:

class CensusController < ApplicationController 

def search 
    @census = Census.where("'NBRHD_NAME' like ?", "%#{params[:search]}%") 

    render :json => @census.to_json 
end 

end 

而且我在其他視圖/控制器

google.maps.event.addListener(kmlLayer, 'click', function(kmlEvent) { 
     var text = kmlEvent.featureData.name; 
     var offset = kmlEvent.latLng; 
     showInInfoWindow(text, offset); 
     map.panTo(kmlEvent.latLng); 
     map.setZoom(13); 
     //console.log(kmlEvent); 
     showInContentDiv(text); 
    }); 

    function showInInfoWindow(text, offset) { 
     var content = "<div>" + text + "</div>"; 
     var infoWindow = new google.maps.InfoWindow({ 
      content: content, 
      position: offset 
     }); 
     infoWindow.open(map); 

    } 

    function showInContentDiv(neighborName) { 
     var query = neighborName; 
     var url = "census/search?query=" + query; 

     $.getJSON(url, function(data) { 
      console.log(url); 

      var neigh = data; 

      for (var i in neigh.object) 
      { 
       console.log(neigh); 
      } 
     }); 

我只想附近名字返回,匹配到一個在我的數據庫,而不是全部數據庫名稱以JSON格式返回。有什麼我做錯了嗎?

我再次運行與MySQL2創業板的Rails 3.2

回答

0

SQL使用的字符串常量單引號所以這個查詢:

@census = Census.where("'NBRHD_NAME' like ?", "%#{params[:search]}%") 

確實要求在字符串文字'NBRHD_NAME'包含params[:search]所有行。想必你想在列以查找NBRHD_NAME而非'NBRHD_NAME'所以你應該說:

@census = Census.where("`NBRHD_NAME` like ?", "%#{params[:search]}%") 

@census = Census.where("NBRHD_NAME like ?", "%#{params[:search]}%") 

據我所知,MySQL的列的區分大小寫取決於配置,以便如果您使用的是真正以大寫字母創建的列名,則應該使用反撥出的版本以確保安全。請注意,SQL標識符的反引號是MySQLism,標準SQL爲此目的使用雙引號("NBRHD_NAME"),SQL Server使用括號([NBRHD_NAME])。


我只注意到這個在你的JavaScript:

var url = "census/search?query=" + query; 

這將表明,params[:query]包含你在找什麼,但你的控制器看着params[:search]。結果是你的SQL說like '%%'。所以,解決你的報價,然後看看正確的事params

@census = Census.where("`NBRHD_NAME` like ?", "%#{params[:query]}%") 
+0

我嘗試使用這兩個選項,但軌仍堅持回國,而使用反引號中的所有結果,並沒有蜱 –

+0

是什麼在'PARAMS [:搜索] '和那NBRHD_NAME'值相匹配,你認爲它不應該? –

+0

這就是問題在於它看起來並不匹配所有的值,只會返回數據庫中的所有結果。 –