3

(轨道 3.0.7)

我的routes.rb有这个:

namespace :admin do
  namespace :campus_hub do
    resources :billing_subscriptions, {
      :except => [:destroy, :new, :create]
    } do
      member do
        post :add_addon
      end
    end
  end
end

rake routes显示这条路线:

add_addon_admin_campus_hub_billing_subscription POST   /admin/campus_hub/billing_subscriptions/:id/add_addon(.:format)                            {:action=>"add_addon", :controller=>"admin/campus_hub/billing_subscriptions"}

我的控制器 ( Admin::CampusHub::BillingSubscriptionsController) 有方法add_addon

我在日志中做了一个如下所示的 POST:

Started POST "/admin/campus_hub/billing_subscriptions/50059f5be628f83b13000012/add_addon" for 33.33.33.1 at Tue Jul 17 20:21:17 +0200 2012

我得到这个错误:

AbstractController::ActionNotFound (The action '50059f5be628f83b13000012' could not be found for Admin::CampusHub::BillingSubscriptionsController)

我完全感到困惑。我发出的 POST 请求与路线完全匹配。为什么它认为ID是动作?希望我只是错过了一些明显的东西!

4

1 回答 1

0

我从 rails 版本猜测您遇到了与此类似的问题:Rails 3 中的路由错误,这是 rails 3 中的一个错误,请注意评论:Rails 3 中的路由错误与成员

你需要更换:

  member do
    post :add_addon
  end

像这样:

match "add_addon" => "billing_subscriptions#add_addon", :as => :add_addon, :via => :post

你会得到一个像这样稍微交换的路径:admin_campus_hub_billing_subscription_add_addon_path但它应该在轨道 3 和 4 中工作。

加起来就是这样的:

namespace :admin do
  namespace :campus_hub do
    resources :billing_subscriptions, {
      :except => [:destroy, :new, :create]
    } do
      match "add_addon" => "billing_subscriptions#add_addon", :as => :add_addon, :via => :post
    end
  end
end

请注意,完整的 rake 路由如下所示:

admin_campus_hub_billing_subscription_add_addon POST  /admin/campus_hub/billing_subscriptions/:billing_subscription_id/add_addon(.:format) admin/campus_hub/billing_subscriptions#add_addon
于 2014-03-26T01:41:14.280 回答