testing for non-existent parameters with "if"

Hi Taylor,

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