Rails Search 3.2返回all而不是特定的Query

时间:2013-12-14 23:02:52

标签: mysql ruby-on-rails ruby-on-rails-3 search rails-activerecord

我在我的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

1 个答案:

答案 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]}%")
相关问题