新手问题:
(如果已经在某处讨论过,请道歉。我确实尝试过搜索但未找到相关信息)
Route文件定义以下资源: 资源:照片
Per http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default上述语句将定义与HTTP谓词对应的7条路由。 一切都好到现在! 但是在PhotosControllers类中没有定义“ show ”以外的方法。
我的困惑是:因为在控制器类中没有定义任何其他方法(index / create / edit / destroy / ..),如果用户键入/ photos / new或/照片等哪些方法会处理这些请求?
答案 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也会呈现new
,index
,show
和edit
视图(如果存在)。
答案 3 :(得分:0)
哟可以使用自定义方式。
get 'export/devices' => 'export#devices'
match 'update_company_status' => 'companies#update', via: [:put]