而不是将所有这些添加到routes.rb:
#get 'todos' => 'todos#index'
#get 'todos/new' => 'todos#new'
#post 'todos' => 'todos#create'
Rails resources
是否意味着将上述内容压缩为此内容?
resources :todos
另外,您还可以获得edit
和destroy
?
在这种情况下,有没有理由不使用resources
?
答案 0 :(得分:2)
是的,这就是资源的全部意义所在。 在引擎盖下它创建了这个获取,发布等
此外,您可以将选项传递给资源:
为给定的操作创建映射。
resources :todos, only: [:new]
resources :todos, except: [:edit, :show]
所以在你的情况下,你可以这样做:
resources :todos, only: [:index, :new, :create]
此外,可以使用单数版本:
resource :todo #except and only still apply
这将创建除索引1之外的所有标准CRUD映射。 当您不需要资源的ID部分时,可以使用它。
我倾向于总是使用资源/资源,即使我只需要一个动作就可以使路径文件更具可读性。
答案 1 :(得分:1)
资源创建7条不同的路线:
resources :photos
GET /photos photos#index
GET /photos/new photos#new
POST /photos photos#create
GET /photos/:id photos#show
GET /photos/:id/edit photos#edit
PATCH/PUT /photos/:id photos#update
DELETE /photos/:id photos#destroy
您还可以使用:only
和:except
来决定要使用的7个选项中的哪一个。
resources :photos, only: [:index]
GET /photos photos#index
resources :photos, except: [:index]
GET /photos/new photos#new
POST /photos photos#create
GET /photos/:id photos#show
GET /photos/:id/edit photos#edit
PATCH/PUT /photos/:id photos#update
DELETE /photos/:id photos#destroy
答案 2 :(得分:0)
resources :controller
is just a helper:
资源路由允许您快速声明给定资源控制器的所有常用路由。而不是为
index
,show
,new
,edit
,create
,update
和destroy
操作声明单独的路线,资源丰富的路由在一行代码中声明它们。
控制器意味着资源丰富" (更多解释一下)。因此,当您声明resources :controller
-
GET /photos photos#index display a list of all photos
GET /photos/new photos#new return an HTML form for creating a new photo
POST /photos photos#create create a new photo
GET /photos/:id photos#show display a specific photo
GET /photos/:id/edit photos#edit return an HTML form for editing a photo
PATCH/PUT /photos/:id photos#update update a specific photo
DELETE /photos/:id photos#destroy delete a specific photo
这为您提供了在"完成"中使用所需的足智多谋的行动。控制器。
如果您不需要使用所有这些,您可以选择传递给帮助程序的选项,仅为您提供特定路线,即only:
& except:
:
#config/routes.rb
resources :todos, only: [:new, :index, :create]
您可以传递几个other options -
#config/routes.rb
resources :tasks, as: :todos, controller: :todos, path: "todo_list", path_names: { new: "add", create: "add", index: "all" }, only: [:new, :index, :create]
您还可以将一个块传递给add extra routes的助手:
#config/routes.rb
resources :todos, except: :destroy do
get :today, on: :collection
end
因此,从这个意义上来说,即使您没有使用它提供的所有路线,也建议您使用resources
如果有的话,它可以保持您的路线结构化和维护。
-
Rails使用resorce
方法的原因是提供一组资源丰富的操作/网址。
来自docs:
浏览器通过使用特定HTTP方法(例如GET,POST,PATCH,PUT和DELETE)请求URL来从Rails请求页面。每种方法都是对资源执行操作的请求。资源路由将许多相关请求映射到单个控制器中的操作。
这是更大规范defined in HTTP:
的一部分在网络的早期规范(1990-1994)中,资源一词几乎没有使用。 Web被设计为具有或多或少静态可寻址对象的网络,基本上是文件和文档,使用统一资源定位符(URL)链接。 Web资源被隐式定义为可以识别的东西
在我们的解释中,objects
可以是从iOS
应用程序的链接到文件的任何内容,Rails有一组路径,使我们能够管理我们的对象服务器