0

У меня есть простой метод поиска, установленный в моем приложении Rails, который я хочу вызвать из ajax в другом виде контроллера.Rails Search 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. Есть ли что-то, что я делаю неправильно?

Опять я бег Rails 3.2 с mysql2 жемчужину

ответ

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-идентификаторов является 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

В этом проблема заключается в том, что она не соответствует всем значениям и просто возвращает все результаты из БД. –

Смежные вопросы