Application.rb params[]


#1

I need to check if a parameter is set so that I can build some
information
for my application, but No matter how I format my if statement in the
file "
Application.rb" it return the following error.

You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]

Here is the line

if params[:day]

So we have a nil I know that, its why I am checking to see if it’s empty
or
not.

Here is the funny part just a little lower on the page we have

Parameters: {“month”=>“04”, “day”=>“04”, “year”=>“2002”,
“section”=>“metro”}

so params[:day] should be available.

I have also tried just “params” and “@params” and several other ways all
with the same result. Have also tried == and != with the if all
resulting in
a nil error.

is there some thing that would cause the params hash to not be available
in
the application.rb file?

any help would be appreciated.
Brian


#2

Spectre013 wrote:

if params[:day]

I have no idea if it is correct, but I always check using

if @params.key?(“day”)

Mark F.


#3

Spectre013 wrote:

so params[:day] should be available.
Brian

I am sure there is a shorter way of doing this but

@day_param = @params[‘day’]
@day = @day_param.inspect
if @day == “nil”

Dan


#4

On 1/12/06, Mark F. removed_email_address@domain.invalid wrote:

Mark F.

Tried that and ended up with

You have a nil object when you didn’t expect it!
The error occured while evaluating nil.key?

which is looking like @params is empty. would there be some reason the
params hash is not set or available to the application.rb??


#5

Just as an answer to this if any one has a similar problem it seem that
the
@prams is not available to the initialize method. I moved my code out to
the
application_helper.rb and was able to get it workin ok.

Hope this helps

Brian


#6

On 13/01/2006, at 11:45 AM, Daniel W. wrote:

@day_param = @params[‘day’]
@day = @day_param.inspect
if @day == “nil”

A hash always returns nil for an unknown key. All objects have a nil?
method. Try this:

if @params[‘day’].nil?


Phillip H.
removed_email_address@domain.invalid


#7

Phillip H. wrote:

if @params[‘day’].nil?
http://lists.rubyonrails.org/mailman/listinfo/rails

Hi Phillip,
Not meaning to hijack this thread, I figured that my problem/solution
was relevant to the OP’s.

How would I incorporate your example into my existing code?
specifically the method under the else statement?

def index
@category = @params[‘category_id’]
@categories = @category.inspect
if @categories == “nil”
@items = Item.find_all
else
@items = Item.find_all(“category_id=”+@category)
end
end

Dan


#8

On 1/12/06, Phillip H. removed_email_address@domain.invalid wrote:

A hash always returns nil for an unknown key.

Off topic, but just FYI, nil is only the default value for an unknown
key:

irb(main):006:0> foo = Hash.new(:foo)
=> {}
irb(main):007:0> foo[:bar]
=> :foo

Hash.new can even take a block, which gets called when an unknown key
is accessed. See
http://www.ruby-doc.org/core/classes/Hash.html#M000650.


#9

def index
@category = @params[‘category_id’]
@categories = @category.inspect
if @categories == “nil”
@items = Item.find_all
else
@items = Item.find_all(“category_id=”+@category)
end
end

Dan

def index
@category = params[‘category_id’]
@items = Item.find_all unless @category
@items = Item.find_all_by_category(@category) if @category
end

The params hash may be empty, but the most likely explanation is that
params[:day] != params[“day”]

_Kevin


#10

Daniel W. wrote:

Kevin O. wrote:

With this I get the error:

Undefined method `find_all_by_category’ for Item:Class

I changed the third line back to:

Item.find_all(“category_id=”+@category)

which made it work, and I shortened the method by 3 lines of code.

Thanks,

Dan

If you are going to use that form, use this instead to avoid SQL
injection…

Item.find_all(:conditions=>[“category = ?”, @category])

I’m not sure why the dynamic finder doesn’t work in your case…

_Kevin


#11

On 1/12/06, Daniel W. removed_email_address@domain.invalid wrote:

    end

which made it work, and I shortened the method by 3 lines of code.

Thanks,

Dan

I have it woking no problem with the inital call to the method not being
inside of the initalize method.

EXAMPLE:

class StoriesController < ApplicationController
def intialize
if @params[:id]
…more code here
end
end

will throw the nil error, I am not 100% sure but it seems to me that the
params hash is not set up when the initialize method is called.

I have since moved it to a helper and it works just fine. In fact that
was a
better place for it i think.

If some on knows or finds out about the params and the initialize method
it
would be nice to find out.

I will keep looking.

Brian


#12

Kevin O. wrote:

With this I get the error:

Undefined method `find_all_by_category’ for Item:Class

I changed the third line back to:

Item.find_all(“category_id=”+@category)

which made it work, and I shortened the method by 3 lines of code.

Thanks,

Dan


#13

Spectre013 wrote:

On 1/12/06, Daniel W. removed_email_address@domain.invalid wrote:
will throw the nil error, I am not 100% sure but it seems to me that the
params hash is not set up when the initialize method is called.

This is probably correct. The initialize method is your object
constructor.

I bet if you did somehting like this it would work…

def initialize
super
if params[:id] …

end

That might let the base classes set up the hash before you tried to use
it.

_Kevin


#14

Thanks Kevin…


#15

On Jan 12, 2006, at 4:14 PM, Spectre013 wrote:

       @items = Item.find_all("category_id="+@category)

@items = Item.find_all_by_category(@category) if @category
Item.find_all(“category_id=”+@category)
being inside of the initalize method.
will throw the nil error, I am not 100% sure but it seems to me

Brian

Brian-

The initialize method of a controller is outside of the request

response cycle so it doesn’t know anything about params. You can get
around this by using filters. Set it up like this:

class StoriesController < ApplicationController

before_filter :do_stuff

def do_stuff
# do stuff with params…
end
end

Cheers-

-Ezra Z.
Yakima Herald-Republic
WebMaster
http://yakimaherald.com
509-577-7732
removed_email_address@domain.invalid