Ruby检查变量是否有长度

Ruby检查变量是否有长度,ruby,ruby-on-rails-3.1,Ruby,Ruby On Rails 3.1,好吧,这听起来可能是一个愚蠢的问题,但我有各种各样的问题,我相信必须有一个简单的方法来做到这一点: 如果变量有长度,如何签入ruby 如果我使用@dvds.length?当它没有长度时,我会得到一个错误未定义的方法长度 基本上,我有一些搜索主要检索ActiveRecord:Relation,但一个或两个简单地返回一个条目,因为它们是按id搜索的。我有如下内容: @total = @dvds.length 显示我们找到了多少 当@dvds不包含任何长度时,我得到一个未定义方法的错误。我做了这样的

好吧,这听起来可能是一个愚蠢的问题,但我有各种各样的问题,我相信必须有一个简单的方法来做到这一点:

如果变量有长度,如何签入ruby

如果我使用
@dvds.length?
当它没有长度时,我会得到一个错误
未定义的方法长度

基本上,我有一些搜索主要检索ActiveRecord:Relation,但一个或两个简单地返回一个条目,因为它们是按id搜索的。我有如下内容:

@total = @dvds.length
显示我们找到了多少

当@dvds不包含任何长度时,我得到一个未定义方法的错误。我做了这样的事情:

if @dvds.class == 'ActiveRecord:Relation' 
@total = @dvds.length if @dvds.length
避免一个错误,但这很可怕,而且容易出现更多错误

必须有一种Ruby方法来检查变量是否有长度,这要漂亮得多,容易得多不是吗

理想情况下,我正在寻找类似于:

if @dvds.class == 'ActiveRecord:Relation' 
@total = @dvds.length if @dvds.length
或类似的


谢谢。

您可以使用以下方法检查对象是否响应指定的方法:


我可以问一下吗;为什么
@dvd
有时没有
长度
?看起来名为
dvds
的变量应该是数组,或者是ActiveRecord作用域(其行为类似于数组)。@MatthewRudy,从上面的问题复制而来:但是一个或两个简单地返回一个条目,因为它们按id搜索。)为了避免这个问题,后来我将它们改为使用
。where
,它将返回一个数组。但是Alex的回答是一个很大的帮助。我会选择改变搜索,让它们都返回收藏,或者至少包装电话,让你知道@dvds总是复数的
@dvds=[Dvd.find_by_id(1)]
@DGM,啊,这一个非常聪明,我甚至没有想到,谢谢。如果这是一个Dvd列表,我建议总是使用同一个对象(我建议一个关系)。然后,您可以在不破坏任何内容的情况下链接排序、分页和额外过滤器。有时做
where(:id=>234)
实际上是最好的解决方案。太好了,这正是我想要的,非常感谢!