这是Rails资源的意图吗?

时间:2015-11-11 19:09:19

标签: ruby-on-rails

而不是将所有这些添加到routes.rb:

  #get 'todos' => 'todos#index'
  #get 'todos/new' => 'todos#new'
  #post 'todos' => 'todos#create'

Rails resources是否意味着将上述内容压缩为此内容?

resources :todos

另外,您还可以获得editdestroy

在这种情况下,有没有理由不使用resources

3 个答案:

答案 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部分时,可以使用它。

我倾向于总是使用资源/资源,即使我只需要一个动作就可以使路径文件更具可读性。

Rails Routing from the Outside In

答案 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

Here is a detailed explanation from the Rails website

答案 2 :(得分:0)

resources :controller is just a helper

  

资源路由允许您快速声明给定资源控制器的所有常用路由。而不是为indexshowneweditcreateupdatedestroy操作声明单独的路线,资源丰富的路由在一行代码中声明它们。

控制器意味着资源丰富" (更多解释一下)。因此,当您声明resources :controller -

时,Rails会轻松创建以下路由
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有一组路径,使我们能够管理我们的对象服务器