我制作了一个简单的演示站点,其中一个模型用于患者名称(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