Rails 条更有意义的路线

Rails routes that make more sense

我有一个控制器,可以根据 ajax 请求创建用户关系。控制器需要知道这两个用户是谁,是什么类型的关系(亲子、配偶等)。

我目前的路线是:

put 'relationships/:id/:second_id/:type'
get 'relationships/:id/:second_id/:type'
patch 'relationships/:id/:second_id/:type'
delete 'relationships/:id/:second_id/:type'

我的方法:create, show, update, delete.

我的问题是,我可以做一个 do 块来把这个写得更简洁吗?另外,这是最好的方法吗?

这是我目前拥有的:

resources :users do
    resources :family_relationships, :only => [:create, :update, :delete, :show], path: 'relationships', as: :relationships
  end

这给了我这些路线:

      user_relationships POST   /users/:user_id/relationships(.:format)     family_relationships#create
       user_relationship GET    /users/:user_id/relationships/:id(.:format) family_relationships#show
                         PATCH  /users/:user_id/relationships/:id(.:format) family_relationships#update
                         PUT    /users/:user_id/relationships/:id(.:format) family_relationships#update

您可以在 config/routes.rb 中获取资源。它也可以嵌套 -

resources :relationships do 
  resources :types
end

如果您这样做 rake routes,将导致路线可用

app_root>$ rake routes 

这是我想到的(虽然我不相信没有更好的方法):

resources :users do
    put 'relationships/:uid/:type', controller: :family_relationships, action: :create
    get 'relationships/:uid/:type', controller: :family_relationships, action: :show
    patch 'relationships/:uid/:type', controller: :family_relationships, action: :update
    delete 'relationships/:uid/:type', controller: :family_relationships, action: :delete
  end

给出这样的路线:

PUT    /users/:user_id/relationships/:uid/:type(.:format) family_relationships#create
GET    /users/:user_id/relationships/:uid/:type(.:format) family_relationships#show
PATCH  /users/:user_id/relationships/:uid/:type(.:format) family_relationships#update
DELETE /users/:user_id/relationships/:uid/:type(.:format) family_relationships#delete