Obtenir Fields_For pour travailler avec la relation HAS_MANY
-
13-11-2019 - |
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?
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