如果任一字符串长于X字符,则为真

时间:2015-03-10 16:20:02

标签: ruby-on-rails ruby

我有一个实例变量@long_name,因此如果用户的名字或姓氏长于X个字符(在本例中为18),我可以有条件地应用模板样式。

 @long_name = current_user.first_name.length > 18

工作正常,但

 @long_name = (current_user.first_name.length || current_user.last_name.length) > 18

不起作用。检查"如果A长于X或者B长于X&#34的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

以下是使用Enumerable#any?的另一种方式,并减少了最小重复

[current_user.first_name,current_user.last_name].any?{ |name| name.length > 18} 

此外,既然你想将它作为一个条件使用,我会把它作为一个方法

def long_name?(*names)
  names.any?{ |name| name.length > 18 }
end

然后您可以使用long_name?(current_user.first_name,current_user.last_name)

进行通话

如果您需要将比较值从18更改为其他数字,这也可以让您更轻松地重复使用。现在您只需要更改一次。

答案 1 :(得分:0)

您需要在表达式的两半中包含>18

@long_name = (current_user.first_name.length > 18 || current_user.last_name.length > 18)

在你的回答中,Ruby在检查current_user.first_name.length || current_user.last_name.length部分之前试图评估>18,这是没有意义的。

答案 2 :(得分:0)

替代方案可能是使用长度数组

lenghts    = [current_user.first_name.length,
              current_user.last_name.length
             ]

@long_name = lenghts.max > 18