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