Ruby on rails Rails资源控制器

Ruby on rails Rails资源控制器,ruby-on-rails,routes,Ruby On Rails,Routes,新手问题: (如果这已经在某个地方讨论过,我表示歉意。我确实尝试过搜索,但没有找到信息) 路由文件定义了以下资源: 资源:照片 根据上述语句,将定义与HTTP谓词对应的7条路由。 直到现在一切都好! 但是PhotosController类中除了“show”之外没有定义其他方法 我的困惑是:由于控制器类中没有定义任何其他方法(index/create/edit/destroy/),如果用户在/photos/new或/photos等中键入。哪个方法将处理这些请求?实际上,任何方法都不会处理这些请求,

新手问题:

(如果这已经在某个地方讨论过,我表示歉意。我确实尝试过搜索,但没有找到信息)

路由文件定义了以下资源: 资源:照片

根据上述语句,将定义与HTTP谓词对应的7条路由。 直到现在一切都好! 但是PhotosController类中除了“show”之外没有定义其他方法


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

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

编辑:

正如Olivier提到的,如果您只想要
show
事件,您可以将更多参数传递给
资源
路由,如

资源:仅照片::显示

资源:照片,仅:[:显示,:索引]
甚至


resources:photos,除了:[:new,:create]
让我们以
photocontroller#new
操作为例

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

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

但是,如果您尚未定义
new
操作,但在
views/photos/new.html.erb
中有一个新的视图文件,则页面将与该文件一起呈现Rails使用约定优于配置的软件设计范例,这意味着它有一种方法来完成工作,除非您覆盖它们。在这种情况下,rails将呈现
新建
索引
显示
编辑
视图(如果存在),即使您尚未在控制器上定义操作

您可以使用自定义方式

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

这是正确的答案。要回答OP可能想知道的问题,可以禁用这些路由:
资源:照片,仅::show
有意义!谢谢Miguelgraz,Rajesh和Oliver!