2013-05-13 51 views
0

我跟着Getting Started With Rails tutorial建立了一個帶有註釋的簡單博客。Rails:使用相同的部分創建和編輯嵌套項目

我去應用它到我自己的場景:歷史項目的歷史。直到我意識到我需要有能力編輯這些歷史項目(有點像編輯評論)之前,一切都是或多或少的好。

我知道了,所以在顯示歷史項目的部分上有一個「編輯項目」鏈接。它似乎擊中歷史項目控制器中的編輯操作。但是我得到一個空白字段的表單,在該按鈕上顯示「創建」。從局部

鏈接,顯示了歷史項:

<%= link_to 'Edit Item', edit_history_history_item_path(history_item.history, history_item) %> 

在歷史項目控制器的編輯動作:

def edit 
    @history = History.find(params[:history_id]) 
    @history_item = HistoryItem.find(params[:id]) 
end 

的edit.html.rb頁面的部分引用部分:

<%= render 'form' %> 

局部本身:

<%= form_for([@history, @history.history_items.build]) do |f| %> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 
    (blah blah lots more fields) 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

我注意到在部分頂部的「@ history.history_items」末尾的.build。我認爲這是創建引用始發歷史記錄(或博客文章)的新歷史記錄項(或對博客文章的新評論)所必需的。有什麼辦法可以保留這部分,因爲它是一個新的歷史項目,但是當我想編輯一個現有的項目時以另一種方式做它?

回答

1

你只需要對部分進行小改動(見下文)。你應該通過在HISTORY_ITEM明確,這樣你就不必依靠什麼實例變量可用來部分:

<%= render 'form', history_item: @history_item %> 

則:

<%= form_for([history_item.history, history_item]) do |f| %> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 
    (blah blah lots more fields) 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 
+1

謝謝!在此之後,我的電話包括添加項目部分變成: '<%= render「history_items/form」,history_item:@ history.history_items.build%>' 此外,我沒有一個普通的節目單獨查看歷史記錄項目,所以在我從歷史記錄中引入歷史記錄的更新操作中,然後執行此操作 - 否則它與原始教程中的博客文章更新幾乎相同。 – 2013-05-13 17:08:15

相關問題