Question

J'ai du mal à générer un formulaire de modèle imbriqué.

Voici mes modèles:

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

Dans le contrôleur d'entraînement, voici ce que j'ai pour la nouvelle action:

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

Cependant, dans le formulaire, lorsque j'essaie Fields_for, je n'obtiens rien:

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

Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Il s'avère que dans Rails 3, je dois utiliser <% = fields_for ...%> au lieu de <% fields_for ...%>.

Autres conseils

Essayez d'ajouter ce qui suit à votre Workout maquette:

attr_accessible :scores_attributes

accepts_nested_attributes_for :scores

Si vous voulez vous assurer qu'un score ne soit pas construit à moins qu'il ne soit valide, et cela peut être détruit grâce à la relation, vous pouvez vous développer:

attr_accessible :scores_attributes

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

Il suffit de changer :field avec un champ pertinent nécessaire pour une partition à créer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top