5

I have written something like this, the same if-else logic I knew from Visual Basic 6.0, but I am sure there is a better "Ruby way" of writing it.

Can you please show me how it would look like in Ruby world?

  if params[:medication_name].nil?
    med_name = 'all'
  elsif params[:medication_name] == 'undefined'
    med_name = 'all'
  else
    med_name = params[:medication_name]
  end
the Tin Man
  • 155,156
  • 41
  • 207
  • 295

5 Answers5

8

There are several different ways you could simplify this, for example:

med_name = params[:medication_name]
med_name = 'all' if med_name.nil? or med_name == 'undefined'
Michael Geary
  • 27,651
  • 9
  • 61
  • 74
4

For your case, something like this:

med_name = params[:medication_name] 
med_name = 'all' if [nil, 'undefined'].include? med_name

For more general long chains of if/elsif/else, look at case statements. They're overkill in this case, but here's an example:

med_name = case params[:med_name]
   when 'undefined', nil 
     'all'
   else
      params[:med_name]
end
Mark Reed
  • 86,341
  • 15
  • 131
  • 165
2

Unique to Ruby:

med_name = {nil=>'all', 'undefined'=>'all'}[params[:medication_name]] || params[:medication_name]
jaeheung
  • 1,198
  • 5
  • 7
1

you can do as below :

val = [nil, 'undefined'].include?(params[:medication_name]) ? "all" : params[:medication_name]
Arup Rakshit
  • 113,563
  • 27
  • 250
  • 306
1

Using case statements is a Ruby-friendly way. If you're checking against one value, you can do:

case params[:medication_name]
    when nil?
        med_name = 'all'
    when 'undefined'
        med_name = 'all'
    else
        med_name = params[:medication_name]
end

Another way is to test against multiple values:

foo = true
bar = false
case
    when foo == true
        puts "foo is true"
    when foo == false
        puts "foo is false"
    when bar == true
        puts "bar is true"
    when bar == false
        puts "bar is false"
    else
        puts "foo and bar are neither true or false!"
end
Arman H
  • 5,238
  • 9
  • 49
  • 72