2012-05-23 43 views
4

我正在讀Rails 3 In Action。該書建立了一類has_many :tickets和一類門票belongs_to :project。在routes.rb中文件看起來像這樣:將數組傳遞給form_for()和link_to()

resources :projects do 
     resources :tickets 
    end 

現在用於創建一票的形式發生在一個數組,像這樣:

<%= form_for [@project, @ticket] do |f| %> 

和票據show.html.erb頁面有鏈接上它看起來像這樣:

<%= link_to "Edit Ticket", [:edit, @project, @ticket] %> 
    <%= link_to "Delete Ticket", [@project, @ticket], :method => :delete, 
    :confirm => "Are you sure you want to delete this ticket?" %> 

現在我很困惑,爲什麼需要兩個對象的數組傳遞到的form_for()和成的link_to()。另外,爲什麼「Edit Ticket」需要和:編輯符號,而「Delete Ticket」不需要:destroy符號。

感謝, 麥克

回答

6

從包含兩種資源的ID,在這種情況下,類似的URL嵌套資源路線:/projects/1/tickets/10。爲了生成這個URL,我們需要知道項目和票據的ID,所以這兩個對象都需要被傳入。

編輯URL進一步發展,並添加一個動作關鍵字 - /projects/1/tickets/10/edit,所以再次我們需要通過這個行動。

然而,Rails中的RESTful destroy路由使用HTTP方法DELETE而不是動作關鍵字,因此破壞門票的URL確實是/projects/1/tickets/10;只需要一個DELETE請求而不是GET。

欲瞭解更多信息,我建議通過閱讀Rails Routing from the Outside In