Rails gives me an error when I test for a blank param like this:
if params[:post][:id]
@comment.commentable = Post.find(params[:post][:id])
elsif params[:event][:id]
@comment.commentable = Event.find(params[:event][:id])
end
If I have params[:post][:id], things are fine. But if I have
params[:event][:id] instead, I get this 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.[]
Rails dies when it checks for the non-existent params[:post][:id]. I
will always send either :event or :post, but never both. How can I use
“if - elsif” to test for this without crashing? Thanks!
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi Taylor,
On 3-Mar-07, at 11:09 PM, Taylor S. wrote:
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.[]
Rails dies when it checks for the non-existent params[:post][:id]. I
will always send either :event or :post, but never both. How can I
use
“if - elsif” to test for this without crashing? Thanks!
If the params[:post] hash is non-existent, then checking within it
to see if there’s an :id value is probably what’s throwing that error.
To avoid this problem you’d want to do something like:
if params[:post] && params[:post][:id]
@comment.commentable = Post.find(params[:post][:id])
elsif params[:event] && params[:event][:id]
@comment.commentable = Event.find(params[:event][:id])
end
Or you could do something like this:
if id = params[:post][:id] rescue nil
@comment.commentable = Post.find(id)
elsif id = params[:event][:id] rescue nil
@comment.commentable = Event.find(id)
end
Thanks,
Dan
Dan K.
Autopilot Marketing Inc.
Email: [email protected]
Phone: 1 (604) 820-0212
Web: http://autopilotmarketing.com/
vCard: http://autopilotmarketing.com/~dan.kubb/vcard
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (Darwin)
iD8DBQFF6nWO4DfZD7OEWk0RAhpXAJsH0ZYbp1Rt5aNZEIUtTa7Z8q9d3ACdHwdm
X6whYvFwH02fEBYi1zMF1v0=
=KFsJ
-----END PGP SIGNATURE-----
Taylor S. wrote:
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.[]
Rails dies when it checks for the non-existent params[:post][:id]. I
will always send either :event or :post, but never both. How can I use
“if - elsif” to test for this without crashing? Thanks!
It depends on what is nil, i.e. params[:post] or params[:post][:id] but
you can do something like:
if params[:post].has_key?(:id)
or
if not params[:post][:id] == nil
–
Michael W.
Rails gives me an error when I test for a blank param like this:
if params[:post][:id]
If I have params[:post][:id], things are fine. But if I have
params[:event][:id] instead, I get this error:
And a third solution yet
if defined? params[:post][:id]
else
end
It will not always work if you use it from a view (because of how local
variables are handled), but for Models, Controllers and the sort it
should be fine.
regards,
javier ramirez
Estamos de estreno… si necesitas llevar el control de tus gastos
visita http://www.gastosgem.com !!Es gratis!!
Thanks to all - these solutions worked. I ended up using “if
params[:post] && params[:post][:id]”