2013-07-12 59 views
1

我在之後的rubyonrails.org教程(我認爲這是關於導軌4)link_to如何決定在控制器中調用哪個動作?

在這一行: <%= link_to "My Blog", controller: "posts" %>

如何軌決定哪些行動從posts_controller調用?

這是否等同於此? <%= link_to 'My Blog', posts_path %>

如果是這樣,何時使用哪個?

回答

1

實際上,兩者都會產生相同的<a>標籤,其href屬性爲/posts

<%= link_to 'My Blog', posts_path %>是一種遵循Rails定義的RESTful約定的資源豐富的路由。 posts_pathposts_controller.rbindex行動的路線。此路徑很可能由資源路線的聲明posts定義:

# config/routes.rb 
resources :posts 

# rake db:migrate 
       posts GET /posts(.:format)      posts#index 
        POST /posts(.:format)      posts#create 
      new_post GET /posts/new(.:format)     posts#new 
      edit_post GET /posts/:id/edit(.:format)    posts#edit 
       post GET /posts/:id(.:format)     posts#show 
        PUT /posts/:id(.:format)     posts#update 
        DELETE /posts/:id(.:format)     posts#destroy 

相比之下,<%= link_to "My Blog", controller: "posts" %>不使用具名的路線,而是通過論點明確路線的控制器。因爲沒有傳遞action,所以鏈接助手會構建一條到默認操作的路線 - index操作。鑑於這種路由模式,下面的列表近似於從上面指定的資源路徑:

<%= link_to 'My Blog', controller: 'posts' %> # /posts 
<%= link_to 'My Blog', controller: 'posts', action: 'new' %> # /posts/new 
<%= link_to 'My Blog', controller: 'posts', action: 'edit', id: post_id %> # /posts/post_id/edit 
<%= link_to 'My Blog', controller: 'posts', action: 'show', id: post_id %> # /posts/post_id 

哪種方法最好?

在兩種選擇之間,最好使用名爲posts_path的路由。通過使用命名路由,您可以使代碼保持乾爽並避免路由更改時與鏈路相關的問題,反之亦然。此外,命名路線有助於確保URL格式正確,並且鏈接使用正確的HTTP請求方法。

2

我相信當沒有明確提供任何操作時,路由器默認爲index操作。

所以,是的,在這種情況下,這兩者是等價的:

link_to 'My Blog', controller: 'posts' 
link_to 'My Blog', posts_path 
3

兩個<%= link_to "My Blog", controller: "posts" %><%= link_to 'My Blog', posts_path %>是等價的,生產:<a href="/posts">My Blog</a>

也就是說,第二個,<%= link_to 'My Blog', posts_path %>,是首選的方法,因爲它是資源導向。請參閱link_to文檔的示例部分。

第一個示例<%= link_to "My Blog", controller: "posts" %>是一種非常老的參數樣式,但如果將非標準操作映射到自定義網址,它與動作結合可能會證明有用。

相關問題