what is the difference "case && if" ?

The statements you are making are not the same

if request.post?

is either true or false

case request   when post

is akin to saying: if request == post

If you want to use a case statement, then try something like: case request.post? when true # do something when false ....etc.

There's not much need for a case statement when evaluating true or false, though.