【问题标题】:custom route via POST通过 POST 自定义路由
【发布时间】:2013-07-15 07:38:35
【问题描述】:

我使用的是 Rails 4.0

在 routes.rb 我有代码

get "test/index"

它工作正常。但是当我添加自定义路线时:

post "test/some_controller_action"

然后通过 curl 发送文件

curl -X POST -H "Content-type: application/json" -d @result.json http://localhost:3000/test/some_controller_action

我得到了错误

Started POST "/test/some_controller_action" for 127.0.0.1 at 2013-07-15 14:28:11 +0700
ActionController::RoutingError (No route matches [POST] "/test/some_controller_action"):
  actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
  railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
  activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged'
  activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged'
  activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged'
  railties (4.0.0) lib/rails/rack/logger.rb:21:in `call'
  actionpack (4.0.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.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
  rack (1.5.2) lib/rack/lock.rb:17:in `call'
  actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call'
  railties (4.0.0) lib/rails/engine.rb:511:in `call'
  railties (4.0.0) lib/rails/application.rb:97: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'

耙路线:

Prefix Verb URI Pattern                   Controller#Action
test_index GET  /test/index(.:format)      test#index
test_some_controller_action POST /test/some_controller_action(.:format) test#some_controller_action

那条路线有什么问题?

【问题讨论】:

  • 你真的创建了控制器吗?
  • 你有一个错字ActionController::RoutingError (No route matches [POST] "/turizm/create_info"): 请参阅turizm 这可能是错误吗?
  • @juanpastas,已编辑帖子。 @MichaelSzyndel,我用rails g controller test index 创建了它,然后我手动添加了动作some_controller_action 和路由

标签: ruby-on-rails


【解决方案1】:

尝试将此添加到您的路线并通过运行 rake 路线查看您的路线

 match '/test/some_controller_action' => 'test#some_controller_action', :via => :post, :as => :some_controller_action

【讨论】:

    【解决方案2】:

    我更喜欢这种格式而不是其他格式,因为它提供了更好的可维护性。请注意,:on => :collection 部分很重要,无论您喜欢哪种方式。

    resources :test do
      post :some_controller_action, :on => :collection
    end
    

    HTH

    【讨论】:

    • 我不明白。就我而言,:collection 是什么?
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多