ArgumentError even if variable is set

P

Prabhas Gupte

I am writing an eruby script (rhtml). Depending on value of a particular
variable, I display number of input boxes.
If that param is not passed, I am setting variable to some value.
It works fine for first time. But when I click on the link, used to
increase input fields, I get ArgumentError even if the variable is set
to proper value.
Here is the code snippet:
-------------------------------------------------
:::

unless cgi.params['numdomains'].empty? then
$numdomains = cgi.params['numdomains']
else
$numdomains = 3
end

:::::

for dcnt in 0...$numdomains
# code to disply input items
end

:::
 
J

Julian Leviston

This is because cgi.params["numdomains"] will return a string.

As a range can't be from a number to a string, you get the following
problem:

in irb:ArgumentError: bad value for range
from (irb):1

What you need to do is run "to_i" on the string.

unless cgi.params['numdomains'].empty? then
$numdomains = cgi.params['numdomains'].to_i
else
$numdomains = 3
end

That should fix your problem.

Julian.

Learn Ruby on Rails! CHECK OUT THE FREE VIDS (LIMITED TIME) NEW VIDEO
(#2) OUT NOW!
http://sensei.zenunit.com/


I am writing an eruby script (rhtml). Depending on value of a
particular
variable, I display number of input boxes.
If that param is not passed, I am setting variable to some value.
It works fine for first time. But when I click on the link, used to
increase input fields, I get ArgumentError even if the variable is set
to proper value.
Here is the code snippet:
-------------------------------------------------
:::

unless cgi.params['numdomains'].empty? then
$numdomains = cgi.params['numdomains']
else
$numdomains = 3
end

:::::

for dcnt in 0...$numdomains
# code to disply input items
end

:::
 
P

Prabhas Gupte

Julian said:
This is because cgi.params["numdomains"] will return a string.

As a range can't be from a number to a string, you get the following
problem:

in irb:ArgumentError: bad value for range
from (irb):1

What you need to do is run "to_i" on the string.

unless cgi.params['numdomains'].empty? then
$numdomains = cgi.params['numdomains'].to_i
else
$numdomains = 3
end

That should fix your problem.

Julian.

Learn Ruby on Rails! CHECK OUT THE FREE VIDS (LIMITED TIME) NEW VIDEO
(#2) OUT NOW!
http://sensei.zenunit.com/
 
P

Prabhas Gupte

If I do cgi.params['numdomains'].to_i then it returns another error:
undefined method `to_i' for []:Array (NoMethodError)

Hence I did to_s first and then to_i. And it worked!
Final code segment is:
cgi.params['numdomains'].to_s.to_i

Thanks Julian!!
 
J

Julian Leviston

That's because your params["numdomains"] is returning a blank array,
so technically it's not empty. to_i is a method of the string class.

you could put

params["numdomains"].to_s.to_i

But I don't know why your numdomains is returning an array??

Julian


Learn Ruby on Rails! CHECK OUT THE FREE VIDS (LIMITED TIME) NEW VIDEO
(#2) OUT NOW!
http://sensei.zenunit.com/


Julian said:
This is because cgi.params["numdomains"] will return a string.

As a range can't be from a number to a string, you get the following
problem:

in irb:
(0.."30")
ArgumentError: bad value for range
from (irb):1

What you need to do is run "to_i" on the string.

unless cgi.params['numdomains'].empty? then
$numdomains = cgi.params['numdomains'].to_i
else
$numdomains = 3
end

That should fix your problem.

Julian.

Learn Ruby on Rails! CHECK OUT THE FREE VIDS (LIMITED TIME) NEW VIDEO
(#2) OUT NOW!
http://sensei.zenunit.com/
 
P

Prabhas Gupte

Julian said:
That's because your params["numdomains"] is returning a blank array,
so technically it's not empty. to_i is a method of the string class.

you could put

params["numdomains"].to_s.to_i

But I don't know why your numdomains is returning an array??

Julian


Learn Ruby on Rails! CHECK OUT THE FREE VIDS (LIMITED TIME) NEW VIDEO
(#2) OUT NOW!
http://sensei.zenunit.com/

cgi.params is an array. And to_i method does not work on arrays.
And contents at each array index are also not strings. Hence, it is
needed to convert them to string first and then use to_i.
to_s works on any object.
 
J

Julian Leviston

Yes, cgi.params is an array, but cgi.params["numdomains"] shouldn't be.

Julian.


Learn Ruby on Rails! CHECK OUT THE FREE VIDS (LIMITED TIME) NEW VIDEO
(#2) OUT NOW!
http://sensei.zenunit.com/


Julian said:
That's because your params["numdomains"] is returning a blank array,
so technically it's not empty. to_i is a method of the string class.

you could put

params["numdomains"].to_s.to_i

But I don't know why your numdomains is returning an array??

Julian


Learn Ruby on Rails! CHECK OUT THE FREE VIDS (LIMITED TIME) NEW VIDEO
(#2) OUT NOW!
http://sensei.zenunit.com/

cgi.params is an array. And to_i method does not work on arrays.
And contents at each array index are also not strings. Hence, it is
needed to convert them to string first and then use to_i.
to_s works on any object.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,289
Messages
2,571,437
Members
48,123
Latest member
LuisRios7

Latest Threads

Top