2012-02-27 17 views
5

Tengo problemas para generar un formulario de modelo anidado.Obteniendo fields_for para trabajar con la relación has_many

Éstos son mis modelos:

class Workout < ActiveRecord::Base 
    has_many :scores 
    has_many :users, :through => :scores 
    accepts_nested_attributes_for :scores 
end 

class Score < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :workout 
end 

class User < ActiveRecord::Base 
    has_many :scores 
    has_many :workout, :through => :scores 
end 

En el controlador de entrenamiento, esto es lo que tengo para la nueva acción:

def new 
    @workout = Workout.new 
    3.times { @workout.scores.build } 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @wod } 
    end 
end 

Sin embargo, en la forma, cuando intento fields_for, I don obtener cualquier cosa:

<% f.fields_for :scores do |builder| %> 
    <p> 
     <%= builder.label :score %><br /> 
     <%= builder.text_field :score %> 
    </p> 
<% end %> 

¿Qué estoy haciendo mal?

+0

¿Qué es 'Wod' y por qué lo estás creando en tu controlador de entrenamientos? –

+0

Eso fue un error tipográfico. ¡Fijo! – Huey

Respuesta

6

Resulta que en Rails 3, necesito usar <% = fields_for ...%> en lugar de <% fields_for ...%>.

0

Trate de añadir lo siguiente a su modelo de Workout:

attr_accessible :scores_attributes 

accepts_nested_attributes_for :scores 

Si desea asegurarse de que una puntuación no quede construido a menos que es válida, y que se puede ser destruido por la relación que pueda ampliar a:

attr_accessible :scores_attributes 

accepts_nested_attributes_for :scores, reject_if: proc { |a| a[:field].blank? }, allow_destroy: true 
validates_associated :scores 

Sólo tiene que activar :field con un campo relevante que se requiere para que se cree una puntuación.

+0

Disculpa, el problema fue usar <% fields_for ...%> en lugar de <% = – Huey

Cuestiones relacionadas