【问题标题】:Customizing routes for nested resources自定义嵌套资源的路由
【发布时间】:2016-12-24 20:37:16
【问题描述】:

我目前有以下资源:

routes.rb

Rails.application.routes.draw do

  resources :store do
    resources :candy
  end
end

如您所知,这会为 6 个 HTTP 操作生成路由,包括嵌套的 store/store_id/candy/... 路由。这对我来说很好,但是我只想使用 GET 和 POST 而不是 PATH/PUT 和 DELETE

POST store/destroy/:idPOST store/update/:id 对我来说是理想的行为。

首先,这是打破惯例吗?如果不是,有没有一种简单的方法来生成这样的路线?

【问题讨论】:

  • 请看the Rails Guides。如果stores 不应该是一个集合,那么使用resource :store(注意resource 是单数)。您可以通过 only:except: 参数控制支持哪些方法。例如resources :candies, only: [:show, :create] 会将GET /candies/:idPOST /candies 路由到CandiesController

标签: ruby-on-rails


【解决方案1】:

您是否有不想使用 PATH/PUT 和 DELETE 方法的特定原因?如果不使用这些方法,您将违反 Rail 的 RESTful 路由约定,但可以创建您正在寻找的路由:

resource :store, except: [:new, :create, :edit, :update, :destroy, :show] do
  resources :candy
end
post '/store/destroy/:id', to: 'store#destroy', as: :destory_store
post '/store/update/:id', to: 'store#update', as: :update_store

这种方式应该为您提供所需的嵌套糖果路线,然后以下 2 条路线将为您提供您正在寻找的发布请求。

【讨论】:

  • 谢谢,我想我会遵守约定的。我问的唯一原因是因为 Twitter(最初是在 Rails 上构建的)只有 GET 和 POST 请求来创建和销毁状态(推文),所以我认为更多的人会习惯这样做
猜你喜欢
  • 2014-08-22
  • 2016-03-03
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多