24

我创建了一个简单的 rails 项目。一切都很好,直到我尝试添加一个新模型Paintings进行belongs_to治疗和通过治疗Patient进行has_many绘画。所以不知何故我创建的嵌套表单没有出现,我相信它与控制器有关!谢谢,来自德国的问候!

治疗控制器:

class TreatmentsController < ApplicationController
  def create
    @patient = Patient.find(params[:patient_id])
    @treatment = @patient.treatments.create(params[:treatment])
    redirect_to patient_path(@patient)
  end

  def destroy
    @patient = Patient.find(params[:patient_id])
    @treatment = @patient.treatments.find(params[:id])
    @treatment.destroy
    redirect_to patient_path(@patient)  
  end
end

nested fields_for并且没有显示治疗的形式:

<%= form_for([@patient, @patient.treatments.build]) do |f| %>
  <div class="field">
    <%= f.label :content %>
    <%= f.text_area :content, :cols => "30", :rows => "10" %>
  </div>
  <div class="field">
    <%= f.label :category_id %>
    <%= f.collection_select :category_id, Category.find(:all), :id, :typ %>
  </div>

  <%= f.fields_for :paintings do |ff| %>
    <div class="field">
      <%= ff.label :name, 'Tag:' %>
      <%= ff.text_field :name %>
    </div>
  <% end %>

  <div class="field">
    <%= f.submit nil, :class => 'btn btn-small btn-primary' %>
  </div>
<% end %>

更新:

展会现场:

<% @patient.treatments.each do |treatment| %>
  <tr>
    <td><%= treatment.category.try(:typ) %></td>
    <td><%= treatment.content %></td>
    <td><%= treatment.day %></td>
    <td><div class="arrow"></div></td>
  </tr>
  <tr>
4

5 回答 5

74

请试试

= f.fields_for :paintings, Painting.new do |p|
于 2013-06-18T18:28:39.680 回答
16

即使这个问题已经很老了,但你错过了new对这个问题至关重要的问题。方法destroycreate这个问题没有任何关系。如果你有一个new方法,看起来像这样:

class TreatmentsController < ApplicationController
  def new
    @patient = Patient.new
  end
end

然后解决方案是修改new方法以“构建”paintings 如下:

class TreatmentsController < ApplicationController
  def new
    @patient = Patient.new
    @patient.paintings.build
  end
end
于 2016-05-20T15:20:54.377 回答
11

尝试在控制器中执行以下新操作

@patient.treatments.build

查看 build_association 部分http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to

您还应该阅读有关嵌套属性的信息。使用这些作为参考 http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

于 2013-06-18T18:13:57.683 回答
5

对谁有用,我正在使用:

<% f.fields_for :partner do |fp| %>

代替:

<%= f.fields_for :partner do |fp| %>
于 2021-01-19T23:32:28.583 回答
0

如果您有一个可选的关联:

在控制器中:

@associated_model = @model.associated_model || @model.build_associated_model

在视图中:

<%= form.fields_for :associated_model do |am| %>
于 2021-12-10T10:03:57.537 回答