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