[rails] parametri form_for

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? :slight_smile:

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.