0

作为 Rails 初学者,我创建了一个简单的演示应用程序来试验嵌套表单。但不知何故,我的代码显示了奇怪的副产品:

在此处输入图像描述

我唯一的目标是在患者显示页面上为患者创建新的治疗方法,现在它显示输入字段,其中包含尚未创建的治疗方法和其他一些疯狂的东西!!我做错了什么?到目前为止我的步骤:

rails new hama

cd hama

rails g scaffold Patient name:string

rails g model Treatment content:string

rake db:migrate

患者型号:

attr_accessible :name, :treatments_attributes
has_many :treatments, :dependent => :destroy
accepts_nested_attributes_for :treatments

治疗模式:

attr_accessible :content
belongs_to :patient

在病人/节目中:

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

 <p>
 <b>Treatments:</b>
 <%= @patient.treatments.each do |treatment| %>
   <%= treatment.content %>
 <% end %>
 </p>

 <%= form_for @patient do |f| %>
   <%= f.fields_for :treatments do |ff| %>
     <%= ff.text_field :content %>
   <% end %>

   <%= f.fields_for :treatments do |ff| %>
     <%= ff.text_field :content %>
   <% end %>

   <%= f.submit %>
 <% end %>

在患者控制器中:

  def show
    @patient = Patient.find(params[:id])
    treatment = @patient.treatments.build

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @patient }
    end
  end
4

2 回答 2

1

您是在谈论它在哪里显示您的处理对象的所有内部?

改变这个:

<%= @patient.treatments.each do |treatment| %>

对此:

<% @patient.treatments.each do |treatment| %>

使用<%= %>, 和=, 表示将该 Ruby 行的结果输出到页面上。没有它,它只是 Ruby 运行的代码。

于 2013-07-22T17:12:43.110 回答
1

=首先,您应该从此行中删除:

<%= @patient.treatments.each do |treatment| %>

您不想显示each. 循环内容提供输出。只需使用:

<% @patient.treatments.each do |treatment| %>

所有其他字段都是输出,因为这是您的代码要求的。这部分代码显示所有相同的字段两次:

<%= f.fields_for :treatments do |ff| %>
  <%= ff.text_field :content %>
<% end %>

<%= f.fields_for :treatments do |ff| %>
  <%= ff.text_field :content %>
<% end %>

如果治疗有两个特定的输入字段,则需要有两个不同的属性。

于 2013-07-22T17:12:09.137 回答