我在我的Rails应用程序中安装了一个简单的搜索方法,我想在另一个控制器视图中从ajax调用。
现在看起来像是这样:
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 gem运行Rails 3.2
答案 0 :(得分: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]}%")
AFAIK,MySQL对列的区分大小写取决于配置,因此如果您使用的是真正以大写形式创建的列名,则应使用反引号版本。请注意,SQL标识符的反引号引用是MySQL主义,标准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]}%")