我有一个实例变量@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的正确方法是什么?
答案 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