# Nested forms ma chi chiama il controller?

**URL:** <https://www.ruby-forum.com/t/nested-forms-ma-chi-chiama-il-controller/215609>\
**Category:** IT\
**Created:** [January 10, 2012, 1:02pm UTC](https://www.ruby-forum.com/t/nested-forms-ma-chi-chiama-il-controller/215609 "2012-01-10T13:02:47Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [January 10, 2012, 1:02pm UTC](https://www.ruby-forum.com/t/nested-forms-ma-chi-chiama-il-controller/215609/1 "2012-01-10T13:02:47Z")

</div>

Forse l’oggetto non e’ molto esaustivo ma non mi veniva niente di  
meglio.  
Il modello Company has\_many managers  
accepts\_nested\_attributes\_for :managers

ed ho creato un form di questo tipo:

= semantic\_form\_for(@company, :html =\> { :multipart =\> true }) do |f|  
= render “manager}\_step”, :f =\> f

= f.buttons do  
= f.commit\_button :button\_html =\> {:class =\> “primary”}

il partial manager e’:

= f.semantic\_fields\_for :managers do |manager|  
= manager.inputs :name, :fiscal\_code, :city, :zip\_code, :address,  
:street\_number, :tel, :email

Questo form funziona, ovviamente nel controller ci va  
@company.managers.build.

Quello che mi sfugge e’:  
se nel partial faccio:

= f.semantic\_fields\_for :manager do |manager|  
= manager.inputs :name, :fiscal\_code, :city, :zip\_code, :address,  
:street\_number, :tel, :email

cioe’ :manager e non :managers  
al submit il form non funziona perche’ per company non esiste  
l’attributo manager ma quello che non capisco e’ che comunque viene  
presentato il form contenente i campi di manager.  
Cio’ significa che viene chiamato il controller di manager con la sua  
action new perche’ nel controller company non ho niente che si  
riferisce a manager.  
Quindi la domanda e’:  
com’e’ che mi vengono presentati i campi per il modello Manager?

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [January 10, 2012, 1:55pm UTC](https://www.ruby-forum.com/t/nested-forms-ma-chi-chiama-il-controller/215609/2 "2012-01-10T13:55:30Z")

</div>

La action new del controller di manager NON viene chiamata.  
Il partial del manager ti viene creato perch glielo hai detto  
esplicitamente di crearlo nella pagina con:  
= manager.inputs :name, :fiscal\_code etc..  
Semplicemente non ti va perch viene sbagliato “l’oggetto” su cui creare  
i  
campi indicati.

La relazione che hai definito con company di tipo 1:N e quindi  
plausibile fare @company.managers (che restituir un array di manager) e  
il  
fields\_for va a creare il manager in oggetto inserendolo dentro  
@company.managers.

Il giorno 10 gennaio 2012 13:02, Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> * * *
> 
> Ml mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
Matteo C.  
Ufficio Reti e Sistemi  
Universit degli Studi di Ferrara  
Tel. 0532 97 4153

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [January 10, 2012, 5:47pm UTC](https://www.ruby-forum.com/t/nested-forms-ma-chi-chiama-il-controller/215609/3 "2012-01-10T17:47:25Z")

</div>

2012/1/10 Matteo C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> @company.managers.  
> Quindi se non ho capito male nel controller dovrei creare anche  
> l’oggetto @company.managers.  
> Forse sono io che non capisco una mazza ma la questione delle nested  
> forms con accepts\_nested\_attributes\_for non mi e’ chiara per nulla.  
> Se io voglio creare una nuova company e contemporaneamente, sfruttando  
> lo stesso form, creare un Manager e aggiungerlo ai managers della  
> company non mi basta un @company = Company.new nel controller e un  
> fields\_for :manager nel form?

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [January 11, 2012, 8:12pm UTC](https://www.ruby-forum.com/t/nested-forms-ma-chi-chiama-il-controller/215609/4 "2012-01-11T20:12:01Z")

</div>

> \<%= f.fields\_for :managers do |builder| %\>
> 
> \<%= builder.label :name, "Manager name:" %\>  
> \<%= builder.text\_field :name %\>
> 
> \<% end %\>
> 
> \<%= f.submit "Submit" %\>
> 
> \<% end %\>

hai usato fields\_for :managers come infatti avevo detto che  
funzionava, e non fields\_for :manager.  
In quest’ultimo caso non funziona anche se faccio il build  
dell’oggetto pero’ mi apre comunque il form relativo al manager, e’  
questo che non capisco.

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [January 11, 2012, 9:19pm UTC](https://www.ruby-forum.com/t/nested-forms-ma-chi-chiama-il-controller/215609/5 "2012-01-11T21:19:37Z")

</div>

Te lo scritto nella prima email: il fatto che ti mostra il forma del  
manager dovuto al fatto che nella view hai posizionato i relativi  
campi!!! Quello che cambia il nome relativo a quei campi: se apri con  
firebug vedrai che in un caso troverai scritto manager e nell’altro  
managers!

Dal punto di vista sintattico rails ha ragione e ti visualizza il form  
comunque. La differenza sta dal punto di vista semantico!  
Il giorno 11/gen/2012 20:11, “Mauro” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [January 10, 2012, 8:02pm UTC](https://www.ruby-forum.com/t/nested-forms-ma-chi-chiama-il-controller/215609/6 "2012-01-10T20:02:22Z")

</div>

per il tuo caso userei questo codice

# companies\_controller.rb

def new  
@company = Company.new  
@company.managers.build  
respond\_with @company  
end

def create  
@company = Company.new(params[:company])  
if @company.save  
flash[:notice] = ‘Company saved!’  
end  
respond\_with @company  
end

# company.rb

has\_many :managers, :dependent =\> :destroy

# companies/new.html.erb

\<%= form\_for @company do |f| %\>  
\<%= f.error\_messages %\>

\<%= f.label :name %\>  
 \<%= f.text\_field :name %\>

 \<%= f.fields\_for :managers do |builder| %\> 

\<%= builder.label :name, "Manager name:" %\>  
 \<%= builder.text\_field :name %\>

 \<% end %\> 

\<%= f.submit "Submit" %\>

\<% end %\>

Il giorno 10 gennaio 2012 17:46, Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> 2012/1/10 Matteo C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
> 
> > La action new del controller di manager NON viene chiamata.  
> > Il partial del manager ti viene creato perch glielo hai detto  
> > esplicitamente di crearlo nella pagina con:  
> > = manager.inputs :name, :fiscal\_code etc..  
> > Semplicemente non ti va perch viene sbagliato “l’oggetto” su cui  
> > creare i  
> > campi indicati.
> > 
> > La relazione che hai definito con company di tipo 1:N e quindi  
> > plausibile fare @company.managers (che restituir un array di manager)  
> > e il  
> > fields\_for :manager nel form?
> 
> * * *
> 
> Ml mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
Matteo C.  
Ufficio Reti e Sistemi  
Universit degli Studi di Ferrara  
Tel. 0532 97 4153
