如何在 rails 中保持 CRUD 和 RESTFull(具体示例)
How to keep it CRUD and RESTFull in rails (concrete example)
我很难让我的控制器不要太复杂,并且在我们搭建脚手架时 rails 创建基本操作。
谁能告诉我下面的方法是否正确。
我有一个模型 Project
以及它的那些基本路线:
GET /projects -> Project#index
GET /projects/new -> Project#new
POST /projects -> Project#create
GET /projects/:id -> Project#show
GET /projects/:id/edit -> Project#edit
PATCH /projects/:id -> Project#update
PUT /projects/:id -> Project#update
现在我想让用户接受项目。首先,他有一个摘要视图,他可以在其中按下一个按钮,它应该会更改模型中的一些值。
我的第一次尝试是
GET /projects/:id/accept -> Project#accept
POST /projects/:id/accept -> Project#accept_update
这感觉不对。
所以我想知道我是否应该这样做:
GET /projects/:id/accept -> Acceptations#new
POST /projects/:id/accept -> Acceptations#create
但是,我的接受控制器正在处理 Project
模型。什么开始让我感到困惑。
最重要的是,如果我选择第二个选项,路径应该是 /projects/:id/acceptations/new
这对最终用户来说似乎很长而且令人困惑。
有一种约定(有时称为 "heroku REST style")将这些 "extra" 方法作为 "actions" 放在主要资源下。
所以你会得到这个来接受项目。
POST /projects/:id/actions/accept
从 REST 的角度来看,此路由解析的内容无关紧要。可能是 ProjectsController
中的一个动作。我可能会为此操作创建一个专用控制器,controllers/projects/actions/accept_controller.rb
至于new
路线,jsonapi不需要。如果是 GUI(例如您的网站),您可能也不需要单独的页面。相反,它只是一个小表格,在项目显示页面的某处带有 "accept" 按钮。
我很难让我的控制器不要太复杂,并且在我们搭建脚手架时 rails 创建基本操作。
谁能告诉我下面的方法是否正确。
我有一个模型 Project
以及它的那些基本路线:
GET /projects -> Project#index
GET /projects/new -> Project#new
POST /projects -> Project#create
GET /projects/:id -> Project#show
GET /projects/:id/edit -> Project#edit
PATCH /projects/:id -> Project#update
PUT /projects/:id -> Project#update
现在我想让用户接受项目。首先,他有一个摘要视图,他可以在其中按下一个按钮,它应该会更改模型中的一些值。
我的第一次尝试是
GET /projects/:id/accept -> Project#accept
POST /projects/:id/accept -> Project#accept_update
这感觉不对。
所以我想知道我是否应该这样做:
GET /projects/:id/accept -> Acceptations#new
POST /projects/:id/accept -> Acceptations#create
但是,我的接受控制器正在处理 Project
模型。什么开始让我感到困惑。
最重要的是,如果我选择第二个选项,路径应该是 /projects/:id/acceptations/new
这对最终用户来说似乎很长而且令人困惑。
有一种约定(有时称为 "heroku REST style")将这些 "extra" 方法作为 "actions" 放在主要资源下。
所以你会得到这个来接受项目。
POST /projects/:id/actions/accept
从 REST 的角度来看,此路由解析的内容无关紧要。可能是 ProjectsController
中的一个动作。我可能会为此操作创建一个专用控制器,controllers/projects/actions/accept_controller.rb
至于new
路线,jsonapi不需要。如果是 GUI(例如您的网站),您可能也不需要单独的页面。相反,它只是一个小表格,在项目显示页面的某处带有 "accept" 按钮。