【发布时间】: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