将一个控制器操作映射到另一个操作轨道

时间:2016-05-15 10:53:47

标签: ruby-on-rails rest routes nested-routes custom-routes

我有一个名为carts_controller的控制器,在我的路线中,我使用的是宁静的路线,即resources :carts

我知道资源会创建默认操作,例如创建,索引等,但如果我不想创建和创建方法add_to_cart,并且在路由中我已将其路由定义为

post '/add_cart/:product_id/' => 'carts#add_to_cart', as: 'add_to_cart' 

这条路线是否考虑过RESTFUL?

我不想使用资源创建的所有默认RESTFUL路由。我想要一些自定义动作来代替这些。我的代码正在运行但我很困惑,因为我的概念不明确。另一件事是,如果我知道我的路线中需要product_id,我应该将它们嵌套在产品资源中吗?如果我定义了上面定义的自定义广告,它会起作用吗?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我认为你目前的做法很好。并非所有控制器操作都能很好地适应标准的CREATE / UPDATE / DESTROY操作。 add_to_cart的作用也非常明显。

作为替代方案,您可以考虑在购物车控制器的update操作中执行此操作。如果cart有许多products,您可以考虑使用嵌套参数:

params: {
  cart: {
    products_attributes: [{
      "0" => { ...product_attributes_here.. }
    },
    ...
  }
}