学习Ruby和Rails。如果我调用
,请遵循入门指南rails generate scaffold Post name:string title:string content:text
它会生成index.html.erb中的以下代码:
<% @posts.each do |post| %>
<tr>
<td><%= post.name %></td>
<td><%= post.title %></td>
<td><%= post.content %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, confirm: 'Are you sure?', method: :delete %></td>
</tr>
<% end %>
</table>
我在上面唯一关注的是edit_post_path
,我的问题是,它是什么 - 特别是从Ruby角度来看 。它当然具有Ruby方法的每一种外观,并且它嵌入在其他代码中,这绝对是Ruby:posts.each do |post|...end
这就是所有Ruby
但是如果edit_post_path是Ruby方法,那么它的代码在哪里? 'post'是我提供给Rails的标签,因此可能这个Ruby方法应该在我的站点目录中的某个位置以及在上面调用“rails generate scaffold ...”时生成的其他Ruby代码(即它不会在特定于Rails的目录)。但是在任何地方都没有定义'edit_post_path'这样的方法。所以它根本不是真正的Ruby,只是出于某种原因而设计成这样的东西,而且实际上只是一串由Rails严格专有的文本处理的文本。这是一个关于Rails如此酷的例子吗?
答案 0 :(得分:3)
这是一个Rails助手方法 - 詹姆斯指出的sugar
语法 - 用于在你的应用程序中进行路由。
要查看可用的所有路由,请在命令行执行rake routes
。您将在左侧看到帮助程序列表,然后您将在第二列中看到HTTP操作,第三列= URL路径格式,最后一列是控制器及其相关操作的细分。
要查看一些位于此magic
核心的Ruby代码,请在Rails 3 repo中查看,如下所示:https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/routing/mapper.rb#L444
此外,如果您要为特定资源创建自定义网址,请查看:https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/routing/url_for.rb
以下是有关路由的更多信息:http://guides.rubyonrails.org/routing.html
希望有所帮助。
答案 1 :(得分:2)
这是Rails中内置的“糖”-syntax。这样有很多简单的方法可以加速开发。