Home > Enterprise >  Use a safe navegation operator and then compare result
Use a safe navegation operator and then compare result

Time:06-24

I really don't know how to put a clear title for what I am trying to do.

I am working with RoR and in a controller I have this statement:

recipe.cover_image.attach(data: params[:recipe][:cover_image]) if params[:recipe][:cover_image] && params[:recipe][:cover_image].length > 255

So I was trying to use the safe navigation operator for doing it a bit more compact and easy to read, something like this:

recipe.cover_image.attach(data: params[:recipe][:cover_image]) if params[:recipe][:cover_image]&.length > 255

But It doesn't work. I got this:

undefined method `\u003e' for nil:NilClass

The problem is that when is nil, it does something like: nil > 255 ?

Is there a way to do this? Another action after the safe navigation operator?

CodePudding user response:

In short, you can add .to_i to the end of .length to ensure you're comparing like types. E.g.

recipe.cover_image.attach(data: params[:recipe][:cover_image]) if params[:recipe][:cover_image]&.length.to_i > 255

The reason you're getting that error is that NilClass does not have a method called >. However, NilClass does have a .to_i method, which always returns 0. Since > is a method on Integer and 0 is an Integer, the comparison will just work.

  • Related