Sql 从Return语句中获取数组,然后从中推断出一个字符串

Sql 从Return语句中获取数组,然后从中推断出一个字符串,sql,ruby-on-rails,arrays,ruby,return,Sql,Ruby On Rails,Arrays,Ruby,Return,我有一个“Case”条件代码段,其中返回两个对象。 伪代码为- 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

我有一个“Case”条件代码段,其中返回两个对象。 伪代码为-

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
是否有任何方法可以中断此数组并将该位置所需的对象作为字符串返回


谢谢。

返回[object1,object2]。简洁


您可以使用
compact
方法删除数组的
nil
值。

虽然您可以使用
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
更直观。

你可以写:

return (['a', 'b'].include?(name) && - SQL Logic 1 -) ||
         (['c', 'd'].include?(name) && - SQL Logic 2 -)
如果它是方法的最后一行,则不需要
return

让我们看看发生了什么

如果
['a',b'].include?(name)#=>true
,将返回truthy的
-SQL逻辑1-


<> > <代码> [a,' b'′.包含(.name)→=> false ,第一个<代码> &和<代码>子句是“代码> false <代码>(<代码> -SQL逻辑1 -<代码> >未执行),因此我们考虑另一个<代码> < <代码> >子句< <代码>['c','d']。include?(name)必须为true,因此我们返回
-SQL逻辑2-

您还可以向我解释一下,如果我试图访问其中一个返回的对象,比如object1,为什么它会单独充当数组。比如,object1-['value',nil]?它的行为就像一个数组,因为您返回一个数组。当您返回两个值时,它们被放入一个数组中。感谢您的解释:)
case
,而不是“case”。(总是测试!)考虑<代码>案例名称;当'a','b','c','d'返回“SQL语句”;结束或
如果['a'、'b'、'c'、'd']返回“SQL语句”。包括?(名称)
–是的,谢谢你指出。那实际上是个打字错误。我现在已经改正了@卡里斯沃维兰