嵌套表单显示太多字段! Rails初学者

时间:2013-07-22 17:07:14

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

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

enter image description here

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

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 %>

在Patient控制器中:

  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

2 个答案:

答案 0 :(得分: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 %>

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

答案 1 :(得分:1)

您是在谈论它显示治疗对象的所有内部结构的位置吗?

改变这个:

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

到此:

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

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

相关问题