Fields_for mit der has_many-Beziehung zum Laufen bringen
-
13-11-2019 - |
Frage
Ich habe Probleme beim Generieren eines verschachtelten Modellformulars.
Hier sind meine Modelle:
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
Im Workout-Controller habe ich Folgendes für die neue Aktion:
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
Wenn ich jedoch im Formular „fields_for“ ausprobiere, erhalte ich nichts:
<% f.fields_for :scores do |builder| %>
<p>
<%= builder.label :score %><br />
<%= builder.text_field :score %>
</p>
<% end %>
Was mache ich falsch?
Lösung
Es stellt sich in den Schienen 3 heraus, ich muss <%= Felder_FOR ...%> anstelle von <% Felder_FOR ...%>.
Andere Tipps
Versuchen Sie, Folgendes zu Ihrem hinzuzufügen Workout
Modell:
attr_accessible :scores_attributes
accepts_nested_attributes_for :scores
Wenn Sie sicherstellen möchten, dass eine Partitur nur dann erstellt wird, wenn sie gültig ist, und dass sie durch die Beziehung zerstört werden kann, können Sie Folgendes erweitern:
attr_accessible :scores_attributes
accepts_nested_attributes_for :scores, reject_if: proc { |a| a[:field].blank? }, allow_destroy: true
validates_associated :scores
Einfach wechseln :field
mit einem relevanten Feld, das für die Erstellung einer Partitur erforderlich ist.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow