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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top