我按照Getting Started With Rails tutorial设置了一个带评论的简单博客。
我把它应用到我自己的场景中:历史项目的历史。在我意识到我需要能够编辑这些历史项目(有点像编辑评论)之前,一切都或多或少都很好。
我已经知道了部分显示历史项目的“编辑项目”链接。它似乎击中了历史项控制器中的编辑操作。但是我得到一个带有空白字段的表单,在按钮上显示“创建”。
显示历史记录项的部分链接:
<%= 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。我认为这需要创建一个新的历史项目(或博客文章的新评论),它引用了原始历史(或博客文章)。有什么方法可以保留那部分,当它是一个新的历史项目时,但是当我想编辑一个现有项目时,我会采用另一种方式吗?
答案 0 :(得分:2)
您只需对部分进行一些小改动(见下文)。您应该显式传入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 %>