我有一个案例'条件代码片段,其中我返回两个对象。 伪造的代码是 -
case name
when 'a'
object1 = - SQL Logic -
when 'b'
object1 = - SQL Logic -
when 'c'
object2 = - SQL Logic -
when 'd'
object2 = - SQL Logic -
end
return object1, object2
很明显,我要归还两个物体。但是,在我的控制器中,我一次需要一个对象。该对象以数组的形式返回,如[' value',' nil']。其中一个总是零。 在我的控制器中,我将其中一个对象传递为 -
Model.find_by_sql ["select * from #{object}"] #either object1 or object2
有什么方法可以中断这个数组并将那个地方所需的对象作为String返回?
感谢。
答案 0 :(得分:1)
虽然您可以使用compact
来消除数组中的nil
值,但我不确定您为何首先需要此值。
做
case name
when 'a'
return "SQL statement"
when 'b'
return "SQL statement"
when 'c'
return "SQL statement"
when 'd'
return "SQL statement"
end
更直观。
答案 1 :(得分:0)
return [object1, object2].compact
您可以使用compact
方法删除数组的nil
值。
答案 2 :(得分:0)
你可以写:
return (['a', 'b'].include?(name) && - SQL Logic 1 -) ||
(['c', 'd'].include?(name) && - SQL Logic 2 -)
如果它是方法的最后一行,则您不需要return
。
让我们看看发生了什么。
如果['a', 'b'].include?(name) #=> true
,则会返回真正的- SQL Logic 1 -
。
如果['a', 'b'].include?(name) #=> false
,则第一个&&
子句为false
(- SQL Logic 1 -
未执行),因此我们考虑另一个||
子句。 ['c', 'd'].include?(name)
必须为true,因此我们返回- SQL Logic 2 -
。