0

我按照《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。我认为这是创建引用原始历史(或博客文章)的新历史项目(或博客文章的新评论)所必需的。当它是一个新的历史项目时,有什么方法可以让我保留它,但是当我想编辑一个现有的项目时,可以用另一种方式吗?

4

1 回答 1

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 %>
于 2013-05-13T16:31:11.513 回答