【问题标题】:$.ajax post to a ruby on rails 4.1 nested resource is resulting in route error$.ajax 发布到 ruby​​ on rails 4.1 嵌套资源导致路由错误
【发布时间】:2015-02-08 16:05:23
【问题描述】:

我正在尝试使用 $.ajax post 发布到嵌套资源。 不知道我错过了什么。感谢您的帮助!

这是我的

routes.rb

resources :clients do
     resources :timesheets
end

rake 路由输出:

autocomplete_client_name_clients GET      /clients/autocomplete_client_name(.:format)       clients#autocomplete_client_name
                   client_timesheets GET      /clients/:client_id/timesheets(.:format)          timesheets#index
                                     POST     /clients/:client_id/timesheets(.:format)          timesheets#create
                new_client_timesheet GET      /clients/:client_id/timesheets/new(.:format)      timesheets#new
               edit_client_timesheet GET      /clients/:client_id/timesheets/:id/edit(.:format) timesheets#edit
                    client_timesheet GET      /clients/:client_id/timesheets/:id(.:format)      timesheets#show
                                     PATCH    /clients/:client_id/timesheets/:id(.:format)      timesheets#update
                                     PUT      /clients/:client_id/timesheets/:id(.:format)      timesheets#update
                                     DELETE   /clients/:client_id/timesheets/:id(.:format)      timesheets#destroy
                             clients GET      /clients(.:format)                                clients#index
                                     POST     /clients(.:format)                                clients#create
                          new_client GET      /clients/new(.:format)                            clients#new
                         edit_client GET      /clients/:id/edit(.:format)                       clients#edit
                              client GET      /clients/:id(.:format)                            clients#show
                                     PATCH    /clients/:id(.:format)                            clients#update
                                     PUT      /clients/:id(.:format)                            clients#update
                                     DELETE   /clients/:id(.:format)                            clients#destroy

这里是发送到服务器的客户端 jquery 代码:

return $("#save_timesheet").click(function() {
    return $.ajax({
      type: "post",
      url: "<%= client_timesheet_url @timesheet.client, @timesheet %>",
      data: {
        timesheet_data: {
          name: "Filip",
          description: "whatever",
        }
      },
      success: function(data) {
        alert(data.id);
        return false;
      },
      error: function(data) {
        return false;
      }
    });
  });

服务器端 url 助手

<%= client_timesheet_url @timesheet.client, @timesheet %>

类似这样的输出:

/clients/2/timesheets/44

在服务器端,这会导致如下错误:

Started POST "/clients/2/timesheets/44" for 127.0.0.1 at 2015-02-08 18:27:58 +0300

ActionController::RoutingError (No route matches [POST] "/clients/2/timesheets/44"):

这里是详细的服务器日志:

ActionController::RoutingError (No route matches [POST] "/clients/2/timesheets/44"):
  actionpack (4.1.0) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  railties (4.1.0) lib/rails/rack/logger.rb:38:in `call_app'
  railties (4.1.0) lib/rails/rack/logger.rb:20:in `block in call'
  activesupport (4.1.0) lib/active_support/tagged_logging.rb:68:in `block in tagged'
  activesupport (4.1.0) lib/active_support/tagged_logging.rb:26:in `tagged'
  activesupport (4.1.0) lib/active_support/tagged_logging.rb:68:in `tagged'
  railties (4.1.0) lib/rails/rack/logger.rb:20:in `call'
  quiet_assets (1.0.2) lib/quiet_assets.rb:18:in `call_with_quiet_assets'
  actionpack (4.1.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
  rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
  rack (1.5.2) lib/rack/runtime.rb:17:in `call'
  activesupport (4.1.0) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'
  rack (1.5.2) lib/rack/lock.rb:17:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/static.rb:64:in `call'
  rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
  railties (4.1.0) lib/rails/engine.rb:514:in `call'
  railties (4.1.0) lib/rails/application.rb:144:in `call'
  rack (1.5.2) lib/rack/lock.rb:17:in `call'
  rack (1.5.2) lib/rack/content_length.rb:14:in `call'
  rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
  /home/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
  /home/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
  /home/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'

【问题讨论】:

  • "rake routes".. 请输出
  • 尝试运行rake routes 以确保您的路径与其中一条路线匹配。
  • 我也认为, 这应该会有所帮助
  • 增加了耙路由输出
  • type: "post"更改为type: "put"

标签: ruby-on-rails ajax ruby-on-rails-4


【解决方案1】:

没有路由匹配这个 url 与 POST 动词,你应该使用 PUT 代替:

type: "put",

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多