Ottenere campi_per lavorare con la relazione has_many
-
13-11-2019 - |
Domanda
Ho problemi a generare una forma di modello nidificata.
Ecco 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 controller di allenamento, ecco cosa 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, nella forma, quando provo campi_for, non ottengo nulla:
<% f.fields_for :scores do |builder| %>
<p>
<%= builder.label :score %><br />
<%= builder.text_field :score %>
</p>
<% end %>
.
Cosa sto facendo male?
Soluzione
Si scopre in Rails 3, ho bisogno di usare <%= campi_for ...%> invece di <% campi_for ...%>.
Altri suggerimenti
Prova ad aggiungere il seguente al tuo modello Workout
:
attr_accessible :scores_attributes
accepts_nested_attributes_for :scores
.
Se si desidera assicurarsi che un punteggio non venga costruito a meno che non sia valido, e questo può essere distrutto attraverso la relazione che puoi espandere:
attr_accessible :scores_attributes
accepts_nested_attributes_for :scores, reject_if: proc { |a| a[:field].blank? }, allow_destroy: true
validates_associated :scores
.
Basta cambiare :field
con un campo rilevante richiesto per un punteggio da creare.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow