2013-05-13 22 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

相关问题