Hey all,
trying to get a concept down. Or maybe the syntax.
Here is the code:
Phones
<% @person.phones.each { |phone| %>
<%= tag("input", "type" => "text", "id" =>
"phones[#{phone.id}][phone]", "name" => "phones[#{phone.id}][phone]",
"value" => phone.phone) %>
<%= phone.errors.on “phone” %>
<% } %>
Add new phone: (More phones can be added later)
What, exactly, is the [phone] in phones[#{phone.id][phone]? I know
phones is the db phones. I know phone id is the PK (and for
phones[new][phone]. What is phone though? Also, in phones[new][phone],
what is new creating/doing?
Similarly:
def update
@person = Person.find(@params[“person”][“id”])
@person.attributes = @params["person"]
if @person.save
redirect_to :action => "show", :id => @person.id
else
render "person/edit"
end
end
What is [“person”]? What is it referencing?
Thanks.
On 23 Sep 2008, at 21:17, Dave L. wrote:
What, exactly, is the [phone] in phones[#{phone.id][phone]? I know
phones is the db phones. I know phone id is the PK (and for
phones[new][phone]. What is phone though? Also, in phones[new]
[phone],
what is new creating/doing?
This is Rails parameter naming converion
phones[#{phone.id}][phone] means that the corresponding input element
will (in the controller) be at params[‘phones’][‘25’][‘phone’]
(assuming the id was 25).
The ‘new’ is presumably just a convention by whoever wrote this code
to indicate a new record.
I wrote some stuff up about this:
render "person/edit"
end
end
What is [“person”]? What is it referencing?
Not sure what you’re asking about. params is just a regular hash,
they’re pulling out the value with key “person”
Ah, so basically foo[#{a}][b] is nothing more but Ruby conventional
syntax for
@params[‘foo’]['#{a}][b]
As for my other question…I think I understand it now, but I want to be
sure and clarify something.
def update
@person = Person.find(@params[“person”][“id”])
@person.attributes = @params["person"]
if @person.save
redirect_to :action => "show", :id => @person.id
else
render "person/edit"
end
end
@person = Person.find(@params["person"]["id"])
@params[“person”][“id”] could be person[#{id}]. Of course, Person.find
is used because it will return a person record with the corresponding
id.
I am assuming that since Ruby can go from singular to plural, it is
smart enough to know that People.find wants a single record that can
only be found in the people db (as People represents multiple persons).
Frederick C. wrote:
On 23 Sep 2008, at 21:17, Dave L. wrote:
What, exactly, is the [phone] in phones[#{phone.id][phone]? I know
phones is the db phones. I know phone id is the PK (and for
phones[new][phone]. What is phone though? Also, in phones[new]
[phone],
what is new creating/doing?
This is Rails parameter naming converion
phones[#{phone.id}][phone] means that the corresponding input element
will (in the controller) be at params[‘phones’][‘25’][‘phone’]
(assuming the id was 25).
The ‘new’ is presumably just a convention by whoever wrote this code
to indicate a new record.
I wrote some stuff up about this:
Parametrised to the max - Space Vatican
render "person/edit"
end
end
What is [“person”]? What is it referencing?
Not sure what you’re asking about. params is just a regular hash,
they’re pulling out the value with key “person”
On 23 Sep 2008, at 21:50, Dave L. wrote:
Ah, so basically foo[#{a}][b] is nothing more but Ruby conventional
syntax for
@params[‘foo’][’#{a}][b]
sort of. it’s the parameter name that will make the parameters arrive
in that way.
I am assuming that since Ruby can go from singular to plural, it is
smart enough to know that People.find wants a single record that can
only be found in the people db (as People represents multiple
persons).
Yes - rails knows that the table backing the Person class is people
Sent from my iPhone
On 24 Sep 2008, at 00:30, Dave L.
<[email protected]
wrote:
sort of. it’s the parameter name that will make the parameters arrive
in that way.
Why does the param’s name allow it to arrive in that way?
Because that’s what the bit of code parsins query strings/form data is
looking for
Fred
sort of. it’s the parameter name that will make the parameters arrive
in that way.
Why does the param’s name allow it to arrive in that way?