2011-09-24 36 views
2

學習Ruby和Rails。在下面的入門指南,如果我調用什麼是Ruby立場的edit_post_path

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的一個很酷的例子嗎?

回答

3

這是一個Rails輔助方法 - 也就是James指出的sugar語法 - 用於在您的應用程序中進行路由。

要查看所有可用的路線,請在命令行上輸入rake routes。您將在左側看到助手列表,然後您將在第二列,第三列= URL路徑格式中看到HTTP操作,最後一列是控制器及其相關操作的細目。

看到一些Ruby代碼是在這個magic心臟的,檢查出來的Rails 3的回購,這樣的: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

希望有所幫助。

+0

打敗我吧,很好的答案。 OP,如果你想查看helper方法的位置(是的,它們是「直接Ruby方法」,它們只是在你的應用程序啓動時動態定義),請參閱本節:https:// github。 COM /導軌/導軌/ BLOB/d761ec486416df673030417047671c1a190f5aba/ActionPack的/ lib目錄/ action_dispatch /路由/ route_set.rb#L143-204 –

2

它是內置於Rails的「sugar」-syntax。有很多簡單的方法可以加速開發。

+0

他們爲什麼不能爲了統一起見而將這種Ruby方法做成直線。我可以圍繞這種異常情況進行思考。 – Mark

+0

不知道。對我來說,Rails非常棒 - 它爲我帶來了很多樂趣。 – jschorr

+0

猜想「約定配置」哲學並非適用於所有人:) – Jin