Я пытаюсь выполнить вызов ajax от клиента, который агрегирует, а затем возвращает одно случайное объявление с сервера.Неисправность, определяющая пользовательский маршрут в Rails - все запросы ajax по умолчанию отображаются по маршруту show
стороне клиента Ajax вызова
getRandomPerk: function() { return $.ajax({url: url + "/advertisements/get_random_ad.json", type: "GET",dataType: "json", error: this.handleAPIError}); },
routes.rb
resources :advertisements do #collection do # get :get_random_ad #end
member do get :get_random_ad end end
Контроллер advertisement_controller.rb def get_random_ad @advertisement = Advertisement.find_random_advertisement() end
модель advertisement.rb
def self.find_random_advertisement
#ids = Advertisement.select("SELECT id FROM advertisements") Advertisement.find(1) end
(это должно возвращать случайную одно, но я получил его возвращение конкретного один для целей отладки)
журнала сервера
[time:0.000] Started GET "/advertisements/get_random_ad.json" for 10.240.0.75 at 2016-07-27 18:04:17 +0000 [time:0.200] Processing by AdvertisementsController#show as JSON [time:0.201] Parameters: {"id"=>"get_random_ad"} [time:0.207] Advertisement Load (0.1ms) SELECT advertisements.* FROM advertisements WHERE advertisements.id = 0 LIMIT 1 [time:0.208] Completed 404 Not Found in 5.9ms [time:0.209] ActiveRecord::RecordNotFound (Couldn't find Advertisement with id=get_random_ad): app/controllers/advertisements_controller.rb:16:in show'
Почему рельсовый логгер говорит «обработка рекламойСтройлер # шоу»? Разве это не означает «обработка рекламойController # get_random_ad»? Возможно, это фундаментальное недоразумение с моей стороны, но я подумал, что если вы определите новый маршрут в файле routes.rb, он обработает все запросы на этот URL.
То, что происходит в Rails видит 'get_random_ad' как пары, и как таковой он загружает действие шоу. Поскольку маршруты считываются сверху вниз, приоритет имеет #show. Вы используете действие #show? –
Нет, у меня нет действия show, определенного в моих маршрутах. Я знаю, что это определено по умолчанию для моего ресурса, добавив ключевое слово 'only', чтобы переопределить это? –
Вы ставите! Я дал полный ответ на главный пост. –