Given a request like this:
/controller/action?attr=one&attr=two&attr=three
In the action, params[:attr] is equal to “three”.
How do I get an array of “attr” with all three values?
Thanks,
Erik
Given a request like this:
/controller/action?attr=one&attr=two&attr=three
In the action, params[:attr] is equal to “three”.
How do I get an array of “attr” with all three values?
Thanks,
Erik
You would have to rename the attr to something like ‘attr[]’. So now
your request will look lik:
/controller/action?attr[]=one&attr[]=two&attr[]=three
This automatically turns it into an array ‘attr’ which you can see in
the debug out for the parameters.
On Dec 7, 2005, at 9:12 AM, Nick S. wrote:
You would have to rename the attr to something like ‘attr[]’. So now
your request will look lik:/controller/action?attr[]=one&attr[]=two&attr[]=three
This automatically turns it into an array ‘attr’ which you can see in
the debug out for the parameters.
Thanks for that tip.
Though it doesn’t satisfy me
The Java servlet API deals with this by allowing you to get a single
attribute or an array of attributes by a given name. It would be
good for Rails to support this multiple attribute case. For now,
I’ve numbered the params… attr0=one&attr1=two&attr2=three.
Erik
Try /controller/action?attr[]=one&attr[]=two&attr[]=three
On Dec 7, 2005, at 7:59 AM, Erik H. wrote:
Thanks for that tip.
Though it doesn’t satisfy me
The Java servlet API deals with this by allowing you to get a
single attribute or an array of attributes by a given name. It
would be good for Rails to support this multiple attribute case.
For now, I’ve numbered the params… attr0=one&attr1=two&attr2=three.
Isn’t that what Nick just demonstrated? What about it is
unsatisfactory? With
/controller/action?attr[]=one&attr[]=two&attr[]=three
You can do
params[:attr] # => [“one”, “two”, “three”]
On Dec 7, 2005, at 10:01 AM, Jamis B. wrote:
see in
Isn’t that what Nick just demonstrated? What about it is
unsatisfactory? With/controller/action?attr[]=one&attr[]=two&attr[]=three
You can do
params[:attr] # => [“one”, “two”, “three”]
It’s unsatisfactory because it makes ugly URLs!
There is really no technical reason the [] need to be on the
attributes - it only has to do with Rails squashing things into a
Hash otherwise, squeezing out all but the last attribute of a given
name.
Erik
On Wed, 7 Dec 2005, Nick S. wrote:
You would have to rename the attr to something like ‘attr[]’. So now
your request will look lik:/controller/action?attr[]=one&attr[]=two&attr[]=three
This automatically turns it into an array ‘attr’ which you can see in
the debug out for the parameters.
in the past i’ve modified cgi.rb to modify parameter object to support
this
kind of usage:
params[“foo”] #=> “bar_0”
params[“foo”].list #=> [ “bar_0”, “bar_1”, “bar_2” ]
i wonder what people would think of this behaviour in rails?
regards.
On Dec 7, 2005, at 11:10 PM, Justin F. wrote:
You are right that there is no technical reason, but Rails wasn’t
the first to do this - it’s how PHP does it (and DHH used PHP
before devising Rails).See Radar – O’Reilly
Thanks for the background.
All I’m basically asking is there be some way to access the multiple
parameters should (perhaps for legacy app integration reasons, or for
the even more important aesthetic reasons) be accessible somehow. As
it is, they are inaccessible without low-level hacking or scraping
the request_uri manually again.
I liked the proposal for params[:attr].list - that would be nice.
Erik
Erik H. wrote:
The Java servlet API deals with this by allowing you to get a single
You can doparams[:attr] # => [“one”, “two”, “three”]
It’s unsatisfactory because it makes ugly URLs!
There is really no technical reason the [] need to be on the attributes
- it only has to do with Rails squashing things into a Hash otherwise,
squeezing out all but the last attribute of a given name.
You are right that there is no technical reason, but Rails wasn’t the
first to do this - it’s how PHP does it (and DHH used PHP before
devising Rails).
See Radar – O’Reilly
regards
Justin
On Thu, 8 Dec 2005, Erik H. wrote:
I liked the proposal for params[:attr].list - that would be nice.
point me to the request_uri parsing code and i’ll code a patch - it
would be
only 20 lines of code or so. essentially
module ObjectList
def list
@list ||= []
end
end
( request_key_values ).each do |k,v|
if params.has_key? k
params[k].extend ObjectList
params[k].list << params[k] if params.list.empty?
params[k].list << v
else
params[k] = v
end
end
then you could do
params[“conditions”] # the first one
params[“conditions”].list # all of them
totally backward compatible.
i can find the parsing code myself - but i’m slammed today so if someone
points me at it…
Well, actually there is a way you access ‘raw’ cgi parameters.
Try
request.params[‘attr’]
It will return an array of attr values in your case.
Kent.
Well actually it’s quite simple. CgiRequest conveniently delegates to
the
instance of CGI object it encapsulates. So
$ ri CGI
Kent.
On Dec 8, 2005, at 8:55 AM, Kent S. wrote:
Well, actually there is a way you access ‘raw’ cgi parameters.
Tryrequest.params[‘attr’]
It will return an array of attr values in your case.
Ah thank you!
Where would I find this documented? I see that request is a
ActionController::CgiRequest. That doesn’t appear listed at http://
api.rubyonrails.com and digging into the code for action_controller
hasn’t shed light for me on this yet. I’m still coming to grips with
Rails under the hood and the voodoo that it plays with Ruby.
Many thanks for providing exactly what I was after.
Erik
On Dec 8, 2005, at 11:02 AM, Kent S. wrote:
Well actually it’s quite simple. CgiRequest conveniently delegates
to the
instance of CGI object it encapsulates. So$ ri CGI
Thanks again. And now that I look closer, I see good ol’
method_missing mojo:
def method_missing(method_id, *arguments)
@cgi.send(method_id, *arguments) rescue super
end
Thanks for removing my ignorance and showing me that I can actually
have my cake and eat it too with respect to query parameters.
Erik
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs