5

我写过类似的东西,和我从 Visual Basic 6.0 知道的 if-else 逻辑相同,但我确信有更好的“Ruby 方式”来编写它。

你能告诉我它在 Ruby 世界中的样子吗?

  if params[:medication_name].nil?
    med_name = 'all'
  elsif params[:medication_name] == 'undefined'
    med_name = 'all'
  else
    med_name = params[:medication_name]
  end
4

5 回答 5

8

有几种不同的方法可以简化这一点,例如:

med_name = params[:medication_name]
med_name = 'all' if med_name.nil? or med_name == 'undefined'
于 2013-08-15T17:42:16.707 回答
4

对于您的情况,如下所示:

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

对于更一般的if/ elsif/长链else,请查看case语句。在这种情况下,它们有点矫枉过正,但这里有一个例子:

med_name = case params[:med_name]
   when 'undefined', nil 
     'all'
   else
      params[:med_name]
end
于 2013-08-15T17:46:42.400 回答
2

Ruby独有的:

med_name = {nil=>'all', 'undefined'=>'all'}[params[:medication_name]] || params[:medication_name]
于 2013-08-17T01:13:01.903 回答
1

您可以执行以下操作:

val = [nil, 'undefined'].include?(params[:medication_name]) ? "all" : params[:medication_name]
于 2013-08-15T17:46:39.757 回答
1

使用case语句是一种 Ruby 友好的方式。如果您要检查一个值,您可以执行以下操作:

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

另一种方法是针对多个值进行测试:

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
于 2013-08-15T18:01:45.943 回答