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! -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Taylor, On 3-Mar-07, at 11:09 PM, Taylor Strait wrote:> 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!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 Kubb Autopilot Marketing Inc. Email: dan.kubb-HY0TxqzkUC3nxq293hCaZDKzEDxYleXD@public.gmane.org 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----- --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Taylor Strait wrote:> 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! >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 Wang --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> 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!! --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks to all - these solutions worked. I ended up using "if params[:post] && params[:post][:id]" -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---