modulo tipo nidificato e update_attributes
-
27-09-2019 - |
Domanda
Ho una forma nested-modello con una relazione uno-a-molti tra una classe di progetto e la classe membro del team, e nel controllore, una funzione di aggiornamento del tipo:
@project = Project.find(params[:id])
@project.update_attributes(params[:project])
Ora, mi piacerebbe impostare alcuni campi che non sono impostati nella forma di alcuni dei membri del team prima del risparmio accade. Non riesco a utilizzare la funzione update_attributes come è quello di farlo.
Quale sarebbe il modo migliore per farlo?
Grazie, Nicolas.
Soluzione
I apparirebbe nella funzione accepts_nested_attributes_for
. Si potrebbe avere qualcosa di simile:
class Project < ActiveRecord::Base
has_one :team
accepts_nested_attributes_for :team
# also this will be useful
validates_associated :team
end
Nei moduli che si vorranno utilizzare il metodo fields_for
per nidificare i tuoi attributi. Questo potrebbe essere simile:
<% form_for(@project) do |p| %>
<%= p.error_messages %>
<!-- Project name -->
<%= p.text_field :name %>
<% f.fields_for(@project.team) do |t| %>
<!-- Team Name -->
<%= t.text_field :name %>
<% end %>
<%= f.submit 'Create Project' %>
<% end %>
Quando si invia il modulo che sarà in grado di chiamare @project.update_attributes(params[:project])
e funzionerà. È anche possibile raise params.inspect
per vedere come i params sono annidati.
Spero che questo aiuti.