第二章中的“使用Rails进行敏捷开发”一书可以说:
<%= link_to "Goodbye",say_goodbye_path %>
而不是将路径硬编码为“/ say / goodbye”。有道理,我心想。可能Ruby正在将say_goodbye_path
拆分为_
,将第一部分指定为控制器名称,将第二部分指定为操作名称。但是,之后,我生成了以下脚手架:
rails generate scaffold User name:string mail:string
我在index.html.erb
视图中注意到它有类似的方法:edit_user_path(user)
。我试图将其重写为user_edit_path(user)
,但当然,它没有用。我的问题是,为什么脚手架链接相反?我怎么知道我是否应该按照作者在link_to
中使用它们的方式或者脚手架生成它们的方式来编写它们。你能否对此有所了解?
答案 0 :(得分:2)
像user_edit_path
这样的辅助函数由rails自动生成,以将资源上的操作映射到匹配的路由,从而映射HTTP路径和HTTP谓词。你必须明白你在这里处理资源,而不一定是简单的控制器。
虽然大多数情况下您的资源可以映射到单个控制器,但不一定是这样。您可以拥有嵌套或组合的资源,这可能会导致相当复杂的路由定义。
资源通常通过为其命名(在这种情况下为user
)并在其上定义一些允许的操作来定义。 Rails鼓励在那里遵循REST模式,因此您可以使用快捷方式来预先定义某些操作。其中一个是edit
,默认情况下匹配对users_controller#edit的GET请求。 RAILS资源的默认操作是:
HTTP verb path matching controller action
===================================================
GET /users #=> index
GET /users/1 #=> show
GET /users/new #=> new
GET /users/1/edit #=> edit
PUT /users/1 #=> update
POST /users #=> create
DELETE /users/1 #=> destroy
这些映射可以在您的routes.rb上自定义(更改方法,添加或删除操作,......)通常,我们鼓励您使用默认映射,因为标准帮助程序支持这些映射,使您的应用程序更易于理解。
答案 1 :(得分:0)
支架是由模板生成的代码,与路由无关。
路由基于配置文件夹中的route.rb
。默认情况下会路由所有资源(由支架生成)但您可以启用默认规则/:controller/:action/:id
。想想“赶上所有”的情况。
查看路线的方法之一是修改route.rb
并运行rake routes
,看看它们如何变化。这里也有官方指南:http://guides.rubyonrails.org/routing.html