2017-09-11 46 views
1

我是ruby和web开发的新手,我为这个问题搜索了很多,但我仍然没有想通。在Ruby中的AJAX调用:错误404

我有一个按钮

<button type="button" class="btn btn-primary" onclick="add()">Add</button> 

调用的AJAX功能

<script> 

function add() { 
    $.ajax({ 
     type : "get", 
     url : "civil_defence_alerts/checkError", 
     data: null, 
     success: function (data) { 
      alert(data); 
     } 

     } 

    ) 
} 
</script> 

在我的 “civil_defence_alerts_controller” 我定义的命名方法check_error

def check_error 

    #Some code... 

end 

现在,当我点击按钮的Ajax调用,因为找不到check_error方法(错误404)失败,我已经尝试了不同的的routes.rb配置 ...它快把我逼疯了!

谢谢你们,和对不起我的英语:d

编辑,我的routes.rb:

MyApp::Application.routes.draw do 

    mount Ckeditor::Engine => '/ckeditor' 
    get 'site/index' 

    apipie 
    mount Browserlog::Engine => '/logs' 
    get "home/index" 

    devise_for(:users, :controllers => { 
     :passwords => 'password'}) 

    devise_for(:admins, 
     controllers: {registrations: 'admins/registrations'}) 


    match 'admin', to: "admin/municipalities#index", via: [:get, :post] 
    resources :calendars 
    resources :garbage 
    resources :news, only: :show 
    resources :events, only: :show 
    resources :municipalities 
    resources :editable_strings 
    get 'misc/password_reset' 

    namespace :admin do 
    get 'superadmin_dashboard/index' 
    get 'superadmin_dashboard/activities' 
    get 'superadmin_dashboard/issues' 

    root to: 'dashboard#index' 

    resources :push_notifications, only: [:index, :show] 
    resources :rss_importer_logs, only: [:index, :show] 
    resources :poi_importer_logs, only: [:index, :show] 
    resources :features do 
    resources :strategies 
    end 
    resources :api_call_logs, only: [:index, :show] 
    require 'sidekiq/web' 
    require 'sidekiq/cron/web' 
    # require 'sidetiq/web' 
    authenticate :admin do 
    mount Sidekiq::Web => '/workers' 
    end 
    get 'dashboard/index' 

    get 'misc/test_notification' 
    post 'misc/test_notification_send' 
    resources :documents 
    resources :frontends, except: [:show, :destroy] 
    resources :operators 
    resources :users, only: [:index, :show, :destroy] 
    resources :municipalities do 
    resources :attachments do 
    collection do 
     get 'tinymce' 
     post 'tinymce' 
    end 
    end 
    get 'dashboard/index' 
    post 'dashboard/more_information' 

    collection do 
    get 'activate_municipality' 
    post 'activate' 

    end 
    member do 
    get 'suspend' 
    get 'reactivate' 
    end 
    resources :admins do 
    member do 
     get 'log' 
     get 'logs' 
    end 
    end 
    resources :calendar_types 
    resources :calendars do 
    resources :garbage_category_rules 
    member do 
     get 'manage' 
     get 'occurrences' 
     get 'download' 
    end 
    end 



    resources :civil_defence_alerts do 
    collection do 
     post 'update_alert' 
     post 'add_alert' 
     get 'get_alerts' 
    end 
    end 
    resources :civil_defence_phone_numbers 
    resources :civil_defence_informations 

    resources :documents 
    resources :events do 
    member do 
     get 'push_modal' 
     post 'push' 
    end 
    end 
    resources :event_categories, except: [:show] 
    resources :ckan_resources, except: [:show] do 
    resources :ckan_resource_logs, only: [:index] 
    member do 
     get 'run' 
    end 
    end 
    resources :garbage 
    resources :garbage_categories 
    resources :garbage_collections 
    resources :issues do 
    resources :issue_comments 
    resources :issue_emails 
    collection do 
     get 'export' 
    end 
    member do 
     delete 'really_delete' 
     get 'restore' 
     get 'unlink' 
    end 
    end 
    resources :issue_statistics, only: [:index] 
    resources :logs, :only => [:index, :show] 
    resources :menus, :only => [] do 
    resources :menu_items do 
     collection do 
     post 'update_order' 
     end 
    end 
    end 
    resources :municipality_services, except: [:show] 
    resources :site_menus, :only => [] do 
    resources :site_menu_items do 
     collection do 
     post 'update_order' 
     end 
    end 
    end 
    resources :municipality_sections, :only => [:index, :edit, :update] 
    resources :municipality_settings, :only => [:index, :edit, :update] 
    resources :news do 
    member do 
     get 'push_modal' 
     post 'push' 
    end 
    collection do 
     get 'update_from_feed' 
    end 
    end 
    resources :issue_categories 
    resources :news_categories 
    resources :point_of_interests 
    resources :point_of_interest_categories 
    resources :point_of_interest_categorie_with_childrens 
    resources :pages do 
    collection do 
     post 'update_order' 
    end 
    end 
    resources :site_pages do 
    collection do 
     post 'update_order' 
    end 
    end 
    resources :recycling_areas 
    resources :site_blocks do 
    collection do 
     post 'update_order' 
     post 'set_preferences' 
    end 
    end 
    resources :site_header_images do 
    collection do 
     post 'update_order' 
    end 
    end 
    resources :site_settings, :only => [:index, :edit, :update] do 
    collection do 
     get 'remove_site_logo' 
    end 
    end 
    resources :sponsors 
    resources :subdomains 
    resources :surveys 
    resources :tags, only: [:index] 
    resources :zones 
end 

resources :calendar_type_icons 
resources :garbage_category_icons 
resources :point_of_interest_category_icons 

resources :provinces, only: [:index, :edit, :update] 
resources :regions, only: [:index, :edit, :update] 
end 

# API Access 


    namespace :api, :defaults => {:format => 'json'} do 
    scope "(:frontend)", frontend: /site|tourism|municipium/, defaults: 
    {frontend: 'municipium'} do 
    api_version(:module => "v1", :path => {:value => "v1"}, :defaults => 
    {:format => "json"}, :default => true) do 
     devise_for(:users, :controllers => {:sessions => 
    "api/v1/sessions", 
             :registrations => 
    "api/v1/registrations"}) 
    resources :calendar_types, :only => [:index] 
    resources :calendars, :only => [:index, :show] do 
     collection do 
     get 'last_update' 
     end 
     member do 
     get 'last_update' 
     end 
    end 
    resources :devices, :only => [:index, :show] do 
     collection do 
     post 'remove' 
     post 'add' 
     post 'replace' 
     get 'count' 
     post 'update' 
     end 
    end 

    resources :garbage_categories, :only => [:index, :show] do 
     collection do 
     get 'last_update' 
     end 
    end 
    resources :garbage_collections, :only => [:index] 

    resources :garbage_subscriptions, :only => [:index] do 
     collection do 
     post 'remove' 
     post 'add' 
     end 
    end 
    resources :events, :only => [:index, :show] 
    resources :event_categories, :only => [:index, :show] 
    resources :issues 
    resources :issue_categories, :only => [:index] 

    resources :municipalities, :only => [:index, :show] 
    resources :municipality_subscriptions, :only => [:index] do 
     collection do 
     post 'add' 
     post 'remove' 
     post 'set_as_primary' 
     end 

    end 
    resources :news_categories, :only => [:index, :show] 
    resources :news_subscriptions, :only => [:index] do 
     collection do 
     post 'remove' 
     post 'add' 
     end 
    end 
    resources :news, :only => [:index, :show] 
    resources :pages, :only => [:index, :show] 
    resources :point_of_interest_categorie_with_childrens 
    resources :point_of_interest_categories, :only => [:index] do 
     resources :point_of_interests, :only => [:index, :show] 
    end 
    resources :point_of_interests, :only => [:index, :show] 
    resources :recycling_areas, :only => [:index, :show] 
    resources :user_profile, :only => [:index, :show] do 
     collection do 
     post 'destroy_user' 
     post 'reset_password' 
     post 'update_details' 
     post 'get_details' 
     post 'meta_login' 
     post 'change_password' 
     post 'facebook_login' 
     post 'remove' 
     end 
    end 
    resources :sponsors, only: [:index, :show], defaults: {format: 'json'} 
    resources :surveys do 
     member do 
     get 'get_questions' 
     post 'vote' 
     end 
    end 
    resources :zones, :only => [:index, :show] 
    end 
    api_version(:module => "v2", :path => {:value => "v2"}, :defaults => {:format => "json"}) do 
    devise_for(:users, :controllers => {:sessions => "api/v2/sessions", 
             :registrations => "api/v2/registrations"}) 
    resources :admins, only: [:index] do 
     collection do 
     post 'auth' 
     end 
    end 
    resources :calendars, :only => [:index, :show] do 
     collection do 
     get 'last_update' 
     end 
     member do 
     get 'last_update' 
     end 
    end 
    resources :civil_defence_alerts, only: [:index] 
    resources :civil_defence_informations, only: [:index, :show] 
    resources :civil_defence_levels, only: [:index, :show] 
    resources :civil_defence_phone_numbers, only: [:index] 
    resources :devices, :only => [:index, :show] do 
     collection do 
     get 'remove' 
     post 'remove' 
     post 'add' 
     post 'replace' 
     get 'count' 
     post 'update' 
     post 'device_cleanup' 
     end 
    end 
    resources :garbages, :only => [:index] do 
     collection do 
     get 'last_update' 
     end 
    end 
    resources :garbage_categories, :only => [:index, :show] do 
     collection do 
     get 'last_update' 
     end 
    end 
    resources :garbage_collections, :only => [:index] 

    resources :garbage_subscriptions, :only => [:index, :update] do 
     collection do 
     post 'remove' 
     get 'remove' 
     post 'add' 
     end 
    end 
    resources :events, :only => [:index, :show] 
    resources :event_categories, :only => [:index, :show] do 
     resources :events, only: [:index, :show] 
    end 
    resources :issues do 
     collection do 
     get 'migrate' 
     end 
    end 
    resources :issue_categories, :only => [:index] 
    resources :tags, :only => [:index] 
    resources :issue_statistics, :only => [:index] 
    resources :menus, only: [:index, :show] 
    resources :site_menus, only: [:index, :show] 
    resources :municipalities, :only => [:index, :show] do 
     collection do 
     get 'find_by_subdomain' 
     end 
    end 
    resources :municipality_services, only: [:index] 
    resources :municipality_subscriptions, :only => [:index] do 
     collection do 
     post 'add' 
     post 'remove' 
     post 'set_as_primary' 
     end 

    end 
    resources :news_categories, :only => [:index, :show] do 
     resources :news, only: [:index, :show] 
    end 
    resources :news_subscriptions, :only => [:index] do 
     collection do 
     post 'remove' 
     post 'add' 
     end 
    end 
    resources :news, :only => [:index, :show] 
    resources :pages, :only => [:index, :show] 
    resources :site_pages, :only => [:index, :show] 
    resources :point_of_interest_categorie_with_childrens 
    resources :point_of_interest_categories, :only => [:index] do 
     resources :point_of_interests, :only => [:index, :show] 
    end 
    resources :point_of_interests, :only => [:index, :show] 
    resources :public_offices, only: [:index] 
    resources :recycling_areas, :only => [:index, :show] 
    resources :site_blocks, only: [:index, :show] 
    resources :site_header_images, only: [:index] 
    resources :searches, only: [] do 
     collection do 
     post 'search' 
     get 'search' 
     end 
    end 
    resources :user_profile, :only => [:index, :show] do 
     collection do 
     post 'destroy_user' 
     post 'reset_password' 
     post 'update_details' 
     post 'get_details' 
     post 'meta_login' 
     post 'change_password' 
     post 'social_login' 
     post 'remove' 
     post 'update_access' 
     end 
    end 
    resources :sponsors, only: [:index, :show], defaults: {format: 'json'} 
    resources :surveys do 
     member do 
     get 'get_questions' 
     post 'vote' 
     end 
     collection do 
     get 'migrate' 
     end 
    end 
    end 
end 

    end 
end 
+0

请显示您的routes.rb。 – fangxing

+0

您可以添加您的路线代码吗? – Stuart

+0

我加了我的routes.rb! – Leonardo

回答

4

添加相应的路由你check_error方法:

resources :civil_defence_alerts do 
    collection do 
    ... 
    get 'check_error' 
    end 
end 

而在你的请求中,你需要传递相应的路由URI(正如你在ajax函数的url选项中定义的那样),li ke:

function add() { 
    $.ajax({ 
    url: 'civil_defence_alerts/check_error', 
    success: function (data) { 
     alert(data) 
    } 
    }) 
} 

请注意,如果请求是GET,则不需要指定它。

+0

哦谢谢,它似乎有效!!!!!另一个问题,如果我想从视图传递一个自定义对象到控制器,我该怎么做? – Leonardo

+0

它取决于您要使用的请求类型,如果是POST,那么在您的ajax方法的'data'选项中,如果是GET,则它可以被附加到url中。 –