Ciao! C’è una cosa che non sono mai riuscito a capire fin’ora: in
un’istruzione come questa:
<% form_for :person, @person, :url => { :action => “update” } do |f| %>
il simbolo :person, a cosa serve? Perché non basta passare l’istanza
@person?
Stando alla firma, che è così:
form_for(record_or_name_or_array, *args, &proc)
sembrerebbe che:
record_or_name_or_array == :person;
*args == @person, :url => { :action => “update” }
e poi c’è il blocco.
Oppure:
record_or_name_or_array == :person, @person;
*args == :url => { :action => “update” }
e poi il blocco.
Qualcuno sa spiegarmi? 
On Mar 22, 2008, at 4:01 PM, Luca R. wrote:
Ciao! C’è una cosa che non sono mai riuscito a capire fin’ora: in
un’istruzione come questa:
<% form_for :person, @person, :url => { :action => “update” } do |f|
%>
il simbolo :person, a cosa serve? Perché non basta passare l’istanza
@person?
Se nelle route hai definito:
map.resources :people
allora ti basta scrivere:
<% form_for(@person) do |f| %>
Se il controller e’ dentro un namespace “foo”:
<% form_for([:namespace, @person]) do |f| %>
pero’ se non ricordo male questo metodo e’ scoraggiato, la versione
“pulita” e’:
<% form_for(@person, :url => foo_person_path(@person) %> do |f| %>
Il symbol serve per esplicitare il nome usato all’interno del form nel
caso non ti vada
bene quello desunto dall’oggetto:
<% form_for(:tizio, @person) do |f| %>
<%= f.text_field(:name) %>
<% end %>
il textfield si chiamera’ “tizio[name]” invece di “person[name]”,
utile se per esempio hai piu’ form nella pagina che aggiornano lo
stesso tipo di modello.
S.