1

新手问题:

(抱歉,如果这已经在某处讨论过。我确实尝试搜索但没有找到信息)

Route 文件定义了以下资源: resources :photos

根据http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default,上面的语句将定义 7 条与 HTTP 动词对应的路由。到目前为止一切顺利!但是在 PhotosControllers 类中没有定义除“ show ”之外的方法。

我的困惑是:由于控制器类中没有定义其他方法(index/create/edit/destroy/..),如果用户键入 /photos/new 或 /photos 等,哪些方法将处理这些请求?

4

4 回答 4

2

让我们以PhotosController#new行动为例。

如果你没有定义new你的控制器的动作并且你没有定义new视图,你会得到一个错误,例如:

Error: The action 'new' could not be found for PhotosController

但是,如果您尚未定义new操作但您有一个新的视图文件views/photos/new.html.erb,则页面将使用该文件呈现

于 2013-09-09T14:04:51.417 回答
1

实际上,这些请求不会被任何方法处理,index如果用户发出请求,rails 将搜索/尝试使用控制器中的方法,/photos例如,如果未定义这些方法,则会出现异常和 500错误,正如您正确认为的那样。

编辑:

正如 Olivier 提到的,如果你只想要这个show事件,你可以将更多参数传递给resources路由,比如

resources :photos, only: :show或者

resources :photos, only: [:show, :index]甚至

resources :photos, except: [:new, :create]

于 2013-09-09T13:53:02.730 回答
0

Rails 使用约定优于配置软件设计范式,这意味着它有一种做事方式,除非你重写它们。在这种情况下,rails 将渲染newindex和视图showedit如果它们存在),即使您尚未在控制器上定义操作。

于 2013-09-09T14:14:28.697 回答
0

哟可以使用自定义方式。

get 'export/devices' => 'export#devices'
match 'update_company_status' => 'companies#update', via: [:put]
于 2013-09-12T06:23:18.413 回答