Rails资源控制器

时间:2013-09-09 13:48:00

标签: ruby-on-rails routes

新手问题:

(如果已经在某处讨论过,请道歉。我确实尝试过搜索但未找到相关信息)

Route文件定义以下资源: 资源:照片

Per http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default上述语句将定义与HTTP谓词对应的7条路由。 一切都好到现在! 但是在PhotosControllers类中没有定义“ show ”以外的方法。

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

4 个答案:

答案 0 :(得分:2)

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

如果您尚未定义控制器的new操作并且您尚未定义new视图,则会出现错误,例如:

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

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

答案 1 :(得分:1)

实际上这些请求不会被任何方法处理,如果用户使用index发出请求,则rails会搜索/尝试在控制器中使用/photos方法,如果这些方法没有定义你会有异常和500错误,正如你正确想象的那样。

编辑:

正如奥利维尔所提到的,如果您只想要show事件,您可以将更多参数传递给resources路线,例如

resources :photos, only: :show

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

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

答案 2 :(得分:0)

Rails使用约定优于配置软件设计范例,这意味着除非您覆盖它们,否则它有一种处理方式。在这种情况下,即使您没有在控制器上定义操作,rails也会呈现newindexshowedit视图(如果存在)。

答案 3 :(得分:0)

哟可以使用自定义方式。

get 'export/devices' => 'export#devices'
match 'update_company_status' => 'companies#update', via: [:put]