Ruby 检查rails中的对象列表是否为空

Ruby 检查rails中的对象列表是否为空,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby,Ruby On Rails 3,Ruby On Rails 4,假设我有这个 @objects = SampleObject.all 然后我想检查@objects是否为空,我可以选择ff: unless @objects.blank? @objects.each do |object| end else .. end 但是,这样做将触发rails执行SELECT count(*)查询 因此,我可以做一些类似的事情 unless @objects.length > 0 对于给定的特定类,是否有方法重写.blank? 说 def self.emp

假设我有这个

@objects = SampleObject.all
然后我想检查@objects是否为空,我可以选择ff:

unless @objects.blank?
 @objects.each do |object|
 end
else
..
end
但是,这样做将触发rails执行SELECT count(*)查询

因此,我可以做一些类似的事情

unless @objects.length > 0
对于给定的特定类,是否有方法重写
.blank?

def self.empty?
自我长度>0?假:真
结束
您应该使用以下方法:

这是(在本例中)对方法的否定:

您应该使用以下方法:

这是(在本例中)对方法的否定:

您应该使用以下方法:

这是(在本例中)对方法的否定:

您应该使用以下方法:

这是(在本例中)对方法的否定:


SampleObject.all
提供对象,您也可以使用

为空?-如果关系为空,则返回true

因此,你可以写为

unless @objects.blank?
  # ...
end

SampleObject.all
提供对象,您也可以使用

为空?-如果关系为空,则返回true

因此,你可以写为

unless @objects.blank?
  # ...
end

SampleObject.all
提供对象,您也可以使用

为空?-如果关系为空,则返回true

因此,你可以写为

unless @objects.blank?
  # ...
end

SampleObject.all
提供对象,您也可以使用

为空?-如果关系为空,则返回true

因此,你可以写为

unless @objects.blank?
  # ...
end
您可以调用以立即执行查询:

@objects = SampleObject.all.to_a  # runs the query, returns an array

if @objects.any?                  # no query, this is Enumerable#any?
  # ...
end
您可以调用以立即执行查询:

@objects = SampleObject.all.to_a  # runs the query, returns an array

if @objects.any?                  # no query, this is Enumerable#any?
  # ...
end
您可以调用以立即执行查询:

@objects = SampleObject.all.to_a  # runs the query, returns an array

if @objects.any?                  # no query, this is Enumerable#any?
  # ...
end
您可以调用以立即执行查询:

@objects = SampleObject.all.to_a  # runs the query, returns an array

if @objects.any?                  # no query, this is Enumerable#any?
  # ...
end

空白?使用空?,因为
空白?
源代码:

# File activesupport/lib/active_support/core_ext/object/blank.rb, line 13
  def blank?
    respond_to?(:empty?) ? empty? : !self
  end
现在关于的文档说:

如果集合为空,则返回true

如果收集已被删除 已加载或提供了:counter_sql选项,相当于 集合。大小。零

如果集合尚未加载,则它将被删除 等同于集合。是否存在

如果该集合尚未创建 已加载,您将获取记录,不管怎样,这样会更好 要检查collection.length.zero

所以,这真的取决于收藏是否加载?
empty?
any?
都使用
SELEC COUNT(*)
如果集合没有加载(),我想在你的例子中
SampleObject。所有的
都会像@Marek所说的那样延迟加载,因此
COUNT
调用


对于您的情况,我不认为您可以避免调用
COUNT
,因为您想要获取所有记录并急于加载所有记录,只是为了避免第二次调用db,这感觉毫无意义(通过导致更大的调用来解决一个性能问题),但是如果它是一个子集集合,我相信不会有第二次
计数
呼叫。

空白?使用空?,因为
空白?
源代码:

# File activesupport/lib/active_support/core_ext/object/blank.rb, line 13
  def blank?
    respond_to?(:empty?) ? empty? : !self
  end
现在关于的文档说:

如果集合为空,则返回true

如果收集已被删除 已加载或提供了:counter_sql选项,相当于 集合。大小。零

如果集合尚未加载,则它将被删除 等同于集合。是否存在

如果该集合尚未创建 已加载,您将获取记录,不管怎样,这样会更好 要检查collection.length.zero

所以,这真的取决于收藏是否加载?
empty?
any?
都使用
SELEC COUNT(*)
如果集合没有加载(),我想在你的例子中
SampleObject。所有的
都会像@Marek所说的那样延迟加载,因此
COUNT
调用


对于您的情况,我不认为您可以避免调用
COUNT
,因为您想要获取所有记录并急于加载所有记录,只是为了避免第二次调用db,这感觉毫无意义(通过导致更大的调用来解决一个性能问题),但是如果它是一个子集集合,我相信不会有第二次
计数
呼叫。

空白?使用空?,因为
空白?
源代码:

# File activesupport/lib/active_support/core_ext/object/blank.rb, line 13
  def blank?
    respond_to?(:empty?) ? empty? : !self
  end
现在关于的文档说:

如果集合为空,则返回true

如果收集已被删除 已加载或提供了:counter_sql选项,相当于 集合。大小。零

如果集合尚未加载,则它将被删除 等同于集合。是否存在

如果该集合尚未创建 已加载,您将获取记录,不管怎样,这样会更好 要检查collection.length.zero

所以,这真的取决于收藏是否加载?
empty?
any?
都使用
SELEC COUNT(*)
如果集合没有加载(),我想在你的例子中
SampleObject。所有的
都会像@Marek所说的那样延迟加载,因此
COUNT
调用


对于您的情况,我不认为您可以避免调用
COUNT
,因为您想要获取所有记录并急于加载所有记录,只是为了避免第二次调用db,这感觉毫无意义(通过导致更大的调用来解决一个性能问题),但是如果它是一个子集集合,我相信不会有第二次
计数
呼叫。

空白?使用空?,因为
空白?
源代码:

# File activesupport/lib/active_support/core_ext/object/blank.rb, line 13
  def blank?
    respond_to?(:empty?) ? empty? : !self
  end
现在关于的文档说:

如果集合为空,则返回true

如果收集已被删除 已加载或提供了:counter_sql选项,相当于 集合。大小。零

如果集合尚未加载,则它将被删除 等同于集合。是否存在

如果该集合尚未创建 已加载,您将获取记录,不管怎样,这样会更好 要检查collection.length.zero

所以,这真的取决于收藏是否加载?
空?
任何?
都使用
选择计数(*)
如果集合未加载(),我认为