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
  • 158,662
  • 42
  • 215
  • 303

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
  • 28,450
  • 9
  • 65
  • 75
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
  • 91,912
  • 16
  • 138
  • 175
2

Unique to Ruby:

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

you can do as below :

val = [nil, 'undefined'].include?(params[:medication_name]) ? "all" : params[:medication_name]
Arup Rakshit
  • 116,827
  • 30
  • 260
  • 317
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,488
  • 10
  • 51
  • 76