0

我制作了一个简单的演示站点,其中一个模型用于患者姓名(name:string),另一个模型用于治疗(content:text)。我创建了这个“项目”来了解更多关于accepts_nested_attributefor 标签和 fields_for 标签的信息。现在我的问题是,在患者显示页面上,我为治疗创建了一个嵌套公式,就像您在此处看到的那样:

<p id="notice"><%= notice %></p>

<p>
<b>Name:</b>
    <%= @patient.name %>
</p>

<ol>
  <% for treatment in @patient.treatments %>
     <li><%= treatment.content %></li>
   <% end %>
</ol>

<%= form_for(@patient) do |f| %>

<%= f.fields_for :treatments do |builder| %>

<div class="field">
   <%= builder.label :content %><br />
   <%= builder.text_field :content %>
</div>
<% end %>

<div class="actions">
  <%= f.submit %>
</div>
<% end %>

<%= link_to 'Edit', edit_patient_path(@patient) %> |
<%= link_to 'Back', patients_path %>

所以我的问题是,在builder.text_field :content更好的调用中,输入显示了最后保存的治疗<%= builder.content %>,但我希望他不更新它,而是我想添加新的治疗!希望有人能理解我!谢谢

4

1 回答 1

1

我将创建单独的控制器来仅创建treatment,例如。

# treatments_controller.rb
class TreatmentsController < ApplicationController

  def create
    @patient = Patient.find(params[:patient_id])
    @treatment = @patient.treatments.new(params[:treatment])
    if @treatment.save
      redirect_to @patient
    else
      # handle unsuccessful treatment save
    end
  end
end

# routes.rb:
resources :patients do
  resources :treatments, only: :create
end

# form:
<%= form_for @patient, @treatment do |f| %>
  <div class="field">
    <%= f.label :content %><br />
    <%= f.text_field :content %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

您还应该@treatment在操作中设置变量patient#show,如下所示:

@treatment = @patient.treatments.new
于 2013-06-16T13:53:34.630 回答