2016-05-15 26 views
0

我有一个名为carts_controller的控制器,在我的路由中,我使用的是宁静路由,即resources :carts将一个控制器动作映射到另一个动作轨道

我知道资源创建默认的操作,如创建,指数等,但如果我不希望用户创建并创建一个方法add_to_cart和路由作为

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

这是否我已经定义了它的路线路线被认为是RESTFUL?

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

任何帮助,将不胜感激!

+0

是什么'add_to_cart'做,到底是什么?它是否创建新资源或更新资源?如果是这样,它创建/更新了哪些资源? –

+0

'add_to_cart'检查用户是否有任何购物车。如果不是那么它会创建新的购物车。 – rubhan

回答

0

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

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

params: { 
    cart: { 
    products_attributes: [{ 
     "0" => { ...product_attributes_here.. } 
    }, 
    ... 
    } 
} 
相关问题