2016-02-05 1 views
0

Я использую Rails 4.2.3. Я пытаюсь написать метод AJAX для вызова метода в моем контроллере, но я получаю ошибку без маршрутизатора. В моем кофе сценарий, у меня есть этотОшибка «Нет совпадений в маршруте», хотя я определил маршрут

updateAll = (arg) -> 
    object = $('#user_object_object').val() 
    day = $('#user_object_day').val() 
    $.ajax 
    url: "/find_by_user_object_and_day" 
    type: 'GET' 
    data: {day: day, object: object} 
    success: (data) -> 
     $('total').val(data) 
    error: -> 
     alert "Something went wrong" 

и в моей конфигурации/routes.rb У меня есть этот

Rails.application.routes.draw do 
    resources :user_objects do 
    get :find_by_user_object_and_day, on: :collection 
    end 

, а затем в моем «./app/controllers/user_objects_controller.rb» У меня есть это

def find_by_user_object_and_day 
    Userobject.find_by_user_object_and_day(:params[user], :params[object], :params[day]) 
end 

но когда мой метод AJAX вызывается эта ошибка производится на сервере ...

F, [2016-02-05T15:52:29.916816 #12058] FATAL -- : 
ActionController::RoutingError (No route matches [GET] "/find_by_user_object_and_day"): 
    actionpack (4.2.5) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' 
    web-console (2.2.1) lib/web_console/middleware.rb:39:in `call' 
    actionpack (4.2.5) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
    railties (4.2.5) lib/rails/rack/logger.rb:38:in `call_app' 
    railties (4.2.5) lib/rails/rack/logger.rb:22:in `call' 
    actionpack (4.2.5) lib/action_dispatch/middleware/request_id.rb:21:in `call' 
    rack (1.6.4) lib/rack/methodoverride.rb:22:in `call' 
    rack (1.6.4) lib/rack/runtime.rb:18:in `call' 
    activesupport (4.2.5) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' 
    rack (1.6.4) lib/rack/lock.rb:17:in `call' 
    actionpack (4.2.5) lib/action_dispatch/middleware/static.rb:116:in `call' 
    rack (1.6.4) lib/rack/sendfile.rb:113:in `call' 
    railties (4.2.5) lib/rails/engine.rb:518:in `call' 
    railties (4.2.5) lib/rails/application.rb:165:in `call' 
    rack (1.6.4) lib/rack/lock.rb:17:in `call' 
    rack (1.6.4) lib/rack/content_length.rb:15:in `call' 
    rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service' 
    /Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service' 
    /Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run' 
    /Users/davea/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread' 

ответ

-1

Как вы определяете маршрут в пользовательских_объектах ресурсов, маршрут будет доступен в/user_objects/find_by_user_object_and_day, а не в/find_by_user_object_and_day.

Если вы хотите, чтобы иметь возможность на уровне корневой/find_by_user_object_and_day Вам также необходимо определить маршрут на корневом уровне следующим образом:

Rails.application.routes.draw do 
    get '/find_by_user_object_and_day', to: 'user_objects#find_by_user_object_and_day' 
end 
0

Проблема заключается в том, что у вас есть в ваших маршрутов в nested resource, означает, что вы получите вложенную URL/путь:

resources :user_objects do 
    get :find_by_user_object_and_day, on: :collection #-> url.com/users_objects/:user_object_id/find_by_user_object_and_day 
end 

Поскольку вы должны определить маршрут явно в JS (это не имеет никакого способа знать, какие :user_object_id вы хотите отправить посетитель), вы будете иметь для изменения вашего ajax#url, значение:

updateAll = (arg) -> 
    user_object_id = $('#user_object').data("id") #-> however you define the id 
    object   = $('#user_object_object').val() 
    day   = $('#user_object_day').val() 
    $.ajax 
    url: "user_objects/" + user_object_id + "/find_by_user_object_and_day" 
Смежные вопросы