2013-11-23 2 views
1

Я пытаюсь использовать ajax для получения информации от моего контроллера. В принципе, я хочу знать, существуют ли данные в базе данных или нет, поэтому мой контроллер вернет либо true, либо false. На данный момент я просто пытаюсь установить базовый вызов ajaxajax получить данные от контроллера рельсов

в моем файле js У меня есть следующий вызов ajax, так как вы можете видеть, что на данный момент я не делаю никакой логики, потому что мои данные являются просто заполнителями , Позже я добавлю информацию, которую я хочу, чтобы запросить

$.ajax({ 
    type: "GET", 
    url: "/locations/exists", 
    dataType: "JSON", 
    data: { 'locition_exist': loc_exit }, 
    success: function(data) { 
    console.log(data); 
    } 
}); 

В моем контроллере у меня есть

def exists 
    location_exists = true 
    respond_to do |format| 
     format.html 
     format.json {render json: location_exists } 
    end 
    end 

Позже значение будет идти в метод в модели, которая будет запрашивать БД и возвращать истина/ложь.

В моих маршрутах я имею

resources :locations 
    get 'locations/exists', to: 'locations#exists' 

результатов этот код в следующей ошибке

The action 'show' could not be found for LocationsController 

Я новичок в рельсы и Аякс, и я на основе моего кода на различных примерах, которые я прочитал здесь , поэтому я, вероятно, просто делаю глупую ошибку noob. Большое спасибо за вашу помощь

ответ

6

При использовании get или match в маршрутах, вам нужно определить метод контроллера отображается

get 'locations/value', to: 'locations#value' 

обновление

Вы видели ту же ошибку после обновления маршрутов , Существует две причины этой ошибки:

  1. Сначала вы определили resources :location. URL-адрес locations/exists сам соответствует методу «показать» в ресурсах, с использованием маршрутов 'exists' в качестве идентификатора в #show.

  2. Вы не определили show в LocationsController

Таким образом, маршруты будут в первую очередь на карту URL к locations#show с :id как 'exists', а затем попадает в контроллер и нашел #show не существует.

Решения после вашего обновления

Конечно вы можете поставить get 'exists'... перед теми ресурсами, но это выглядит некрасиво.

С 'exists' не требует идентификатора, это метод сбора. Таким образом, вы можете использовать Routes встроенные способы сделать это.

resources :locations do 
    collection do 
    get 'exists' 
    end 
end 

При этом все ваши ресурсы и «существует» могут жить.

+0

Я обновил свой код в своем сообщении. Это все равно приводит к той же ошибке. – Quantico

+0

Благодарим вас за подробный ответ. Я буду больше читать о коллекции, чтобы лучше понять ваше предложение :) – Quantico

+1

@Quantico, мое удовольствие :) Вы можете прочитать документ здесь: http://guides.rubyonrails.org/routing.html#non-resourceful-routes –

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