【问题标题】:Map one controller action on another action rails将一个控制器动作映射到另一个动作轨道上
【发布时间】:2016-05-15 10:53:46
【问题描述】:

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

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

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

这条路线是否被视为 RESTFUL?

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

任何帮助将不胜感激!

【问题讨论】:

  • add_to_cart 到底是做什么的?它是创建新资源还是更新资源?如果是这样,它会创建/更新什么资源?
  • add_to_cart 检查用户是否有任何购物车。如果没有,那么它会创建新的购物车。

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


【解决方案1】:

我认为您目前的方法很好。并非所有控制器操作都适合标准的 CREATE/UPDATE/DESTROY 操作。 add_to_cart 的作用也很明显。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多