为什么脚手架会产生这样的路线?他们为什么工作?

时间:2011-03-06 17:08:30

标签: ruby-on-rails ruby scaffolding

第二章中的“使用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中使用它们的方式或者脚手架生成它们的方式来编写它们。你能否对此有所了解?

2 个答案:

答案 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