2012-02-27 12 views
5

Ho problemi a generare un modulo di modello annidato.Ottenere campi_per lavorare con has_many relationship

Qui sono i miei modelli:

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 

Nel controllore di allenamento, ecco quello che ho per la nuova azione:

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 

Tuttavia, in forma, quando provo fields_for, I don niente:

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

Cosa sto facendo male?

+0

Cos'è 'Wod' e perché lo stai creando nel tuo controller di Workouts? –

+0

Quello era un errore di battitura. Fisso! – Huey

risposta

6

Si scopre in Rails 3, ho bisogno di utilizzare <% = fields_for ...%> invece di <% fields_for ...%>.

0

Prova ad aggiungere il seguente al modello Workout:

attr_accessible :scores_attributes 

accepts_nested_attributes_for :scores 

Se si vuole fare in modo che un punteggio non venga costruito a meno che non è valida, e che si può essere distrutto attraverso il rapporto si può espandersi a:

attr_accessible :scores_attributes 

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

basta passare :field con un settore pertinente che è necessario per un punteggio da creare.

+0

Silly me, il problema stava usando <% fields_for ...%> invece di <% = – Huey

Problemi correlati