AJAX调用Ruby:错误404

时间:2017-09-11 08:12:54

标签: javascript ruby-on-rails ruby ajax routes

我是红宝石和网络开发的新手,我已经搜索了很多这个问题,但我还是没想到。

我有一个按钮

<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>

在我的&#34; civil_defence_alerts_controller &#34;我定义了一个名为 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

1 个答案:

答案 0 :(得分:4)

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

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

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

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

请注意,如果请求是GET,则无需指定。