【问题标题】:Rails routes conventionsRails 路线约定
【发布时间】:2018-07-08 10:35:38
【问题描述】:
我对铁路路线约定有一些疑问。
让我们有如下路线
Rails.application.routes.draw do
resources :products, only: [:index]
resource :cart, only: [:show]
resources :order_items, only: [:create, :update, :destroy]
root to: "products#index"
end
我的问题是为什么购物车不像其他资源那样多元化。
我们什么时候应该多元化资源?
- 与其定义自定义 get 和 post 路由,不如使用资源更好?
【问题讨论】:
标签:
ruby-on-rails
ruby
routes
【解决方案1】:
有时,您需要一条不被 ID 引用的单一路由。例如,localhost:3000/me。
因此,如果您在routes.rb 中写入resource :me,这将为您生成所有路由,除了索引路由,不同之处在于,在显示、编辑、更新的情况下,所有路由都不会使用 ID , 创建和销毁路由,因为我们认为 me 是一个单一的实体。
因此,如果您只想要个人资料页面的单一路线,您只需编写
resource :me, only: [:show]
【解决方案2】:
据我所知,购物车是每个访客的单一属性,我们没有购物车模型(这是一个概念),但我们有很多产品、产品模型和索引操作来获取列表所有产品。所以因为 cart 是一个单一的属性,所以它不是复数的。
你可以在这个question中找到资源和资源之间的区别@
resource 保留标准操作列表(显示、创建、更新、销毁...),我们可以用一行创建所有挑逗标准路由,因此通过使用资源,我们的代码会更干净。
【解决方案3】:
首先我建议您阅读Rails Guides,它包含您所有问题的答案。
我的问题是为什么购物车不像其他资源那样多元化。
有时,您有一个资源,客户端总是在不引用 ID 的情况下查找该资源。定义 resource :post 而不是 resources :post 您将拥有类似 /post 而不是 /post/:post_id ref 的路由
我们什么时候应该多元化资源?
如果您需要路由中的ID 记录并且它是必需的。
与其定义自定义 get 和 post 路由,不如使用资源更好?
如果你有一个基本的 RESTful 路由,最好使用resource(s) 方法,因为它可以缩短为resources :post,而不是表示每个动作都在它自己上也更少的代码 == 更少的错误。