Ruby on Rails,而不是更新新条目模型



我制作了一个简单的演示站点,其中一个模型用于患者名称(name:string),另一个模型用于治疗方法(content:text)。我创建这个"项目"是为了更多地了解accepts_nested_attribute for标签和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 %>最后保存的治疗,但我希望他不更新它,而是我想添加新的治疗!希望有人能理解我!由于

我会创建单独的控制器,只创建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 %>

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

@treatment = @patient.treatments.new

最新更新