ruby-on-rails - form_for - rails nested forms
Rails fields_for forma no aparece, forma anidada (3)
He creado un proyecto de rieles simples. Todo funcionó bien hasta que intenté agregar un nuevo modelo de Paintings
que belongs_to
tratamiento y un Patient
que tiene has_many
pinturas durante el tratamiento. Entonces, de alguna manera, la forma anidada que creé no aparece, ¡creo que tiene que ver con el controlador! Gracias, y saludos desde Alemania!
Controlador de tratamientos:
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
Y el formulario para tratamientos con nested fields_for
que no aparezca:
<%= 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 %>
ACTUALIZAR:
Mostrar Sitio:
<% @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>
Incluso la pregunta es bastante antigua, pero le falta el new
que es crucial para esta pregunta. Los métodos de destroy
y create
no tienen nada con este problema. Si tienes un new
método, que se parece a esto:
class TreatmentsController < ApplicationController
def new
@patient = Patient.new
end
end
Entonces, la solución sería modificar el new
método para "construir" las paintings
esta manera:
class TreatmentsController < ApplicationController
def new
@patient = Patient.new
@patient.paintings.build
end
end
Intenta seguir en nueva acción en el controlador.
@patient.treatments.build
Consulte la parte de build_association http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to
También debe leer acerca de los atributos anidados. Use esos como referencia http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
Por favor, inténtalo
= f.fields_for :paintings, Painting.new do |p|