我在之後的rubyonrails.org教程(我認爲這是關於導軌4)link_to如何決定在控制器中調用哪個動作?
在這一行: <%= link_to "My Blog", controller: "posts" %>
如何軌決定哪些行動從posts_controller調用?
這是否等同於此? <%= link_to 'My Blog', posts_path %>
如果是這樣,何時使用哪個?
我在之後的rubyonrails.org教程(我認爲這是關於導軌4)link_to如何決定在控制器中調用哪個動作?
在這一行: <%= link_to "My Blog", controller: "posts" %>
如何軌決定哪些行動從posts_controller調用?
這是否等同於此? <%= link_to 'My Blog', posts_path %>
如果是這樣,何時使用哪個?
實際上,兩者都會產生相同的<a>
標籤,其href
屬性爲/posts
。
<%= link_to 'My Blog', posts_path %>
是一種遵循Rails定義的RESTful約定的資源豐富的路由。 posts_path
是posts_controller.rb
的index
行動的路線。此路徑很可能由資源路線的聲明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請求方法。
我相信當沒有明確提供任何操作時,路由器默認爲index
操作。
所以,是的,在這種情況下,這兩者是等價的:
link_to 'My Blog', controller: 'posts'
link_to 'My Blog', posts_path
兩個<%= 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" %>
是一種非常老的參數樣式,但如果將非標準操作映射到自定義網址,它與動作結合可能會證明有用。