2012-09-12 24 views
1

我在軌道tutorial上關注路線上的整潔紅寶石。所以我想知道,路由怎麼知道這麼多?路由如何知道這麼多?

我有一個名爲posts_controller的控制器和一個後期模型。在routes.rb中的文件,我添加

# config/routes.rb 
resources :posts 

據我的理解是,這將自動創建與帖子相關聯的所有控制器操作的適當路線。到目前爲止,我只有一個方法,我posts_controller:

# app/controllers/posts_controller.rb 
def index 

end 

但奇怪的是,當我執行

$ rake routes 

它給了我這一切:

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 

如何路由機制知道這麼多,卻從未告訴過我想要創建和更新帖子?

回答

3

使用「資源」無關與行動你已經定義了。它只是創建您在控制器中可能需要的所有寧靜路線。

正如你可以看到它創建:索引,創建新的,編輯,顯示,更新和銷燬

它實際上是不明智的,因爲它創造了根本不存在的行動路線。

如何將其限制爲僅限您所需的操作的示例。

resources :posts, :only => [:show, :index] 
+0

啊,這可以解釋一些事情。那麼使用它是不明智的?你會用什麼? – weltschmerz

+0

我不是故意暗示你不應該使用它,只是它會創建你默認不需要的路線。我已更新我的代碼,以顯示如何限制您所需的操作。 – weexpectedTHIS

+0

太棒了,謝謝! – weltschmerz

2

Ruby on Rails guide, Resource Routing: the Rails Default

資源路由可以讓你快速聲明所有給定的足智多謀的控制器的共同路線。顯示,新建,編輯,創建,更新和銷燬操作,而不是爲您的索引聲明單獨的路線,而是一條足智多謀的路線在一行代碼中聲明它們。

這是Rails輕鬆快速定義路線的方式。它不檢查控制器中的方法。

你對它是如何工作的理解是正確的。話雖這麼說,如果你不希望所有的路線,只希望有索引,創建和更新,你可以選擇這樣做:

resources :posts, :only => [:index, :create, :update] 
相關問題