diff b \ w any,many,以Ruby语言存在

时间:2014-03-11 19:18:33

标签: ruby-on-rails

any?many?exists?之间有什么区别?这三个都在检查表是否为空。

User.exists?
=> false
User.any?
=> false
User.many?
=> false

3 个答案:

答案 0 :(得分:3)

首先关闭.exists?和.many?是通过Rails提供的扩展,而.any?是Ruby。

<强> .ANY吗

.ANY?提供多功能性,而不是检查某些东西是空的。例如:

%w[ant bear cat].any? { |word| word.length >= 3 } #=> true

我们可以将一个块传递给any方法,以查看collect有哪些我们正在寻找的项目。

<强>。很多吗

.many检查是否有多个。

[1,2,3,4,5,6].many? # => true
[].many? # => false
[1].many # => false
[1,2,3,4].many? { |o| o.multiple_of?(2) }

将其视为collection.size&gt;的别名; 1

<强> .exists吗

.exists查看记录是否符合提供的条件

  Person.exists?(5)
  Person.exists?('5')
  Person.exists?(:name => "David")
  Person.exists?(['name LIKE ?', "%#{query}%"])

这比.any。

更具体

<强> .empty吗 如果要查看String,Hash或Array是否为空,可以在其上调用.empty。

答案 1 :(得分:1)

<强>存在吗

如果在给定条件下至少有一条记录,则返回true。你可以传递id或条件

exists?(id_or_conditions = {}) public

内部使用find_initial在内部使用给定条件发出查询并限制1

例如:

User.exists? #SELECT 1 AS one FROM "users" LIMIT 1
User.exists?(2) #SELECT 1 AS one FROM "users" WHERE "users"."id" = 2 LIMIT 1
User.exists?(:name => "name") #SELECT 1 AS one FROM "users" WHERE "users"."name" = 'usha' LIMIT 1

<强>任何吗

如果有atleast one record,则返回true。不带任何参数

例如:

User.any? # SELECT COUNT(*) FROM "users"

<强>许多吗

如果有more than one record,则返回true。不带任何参数

例如:

User.many? #SELECT COUNT(*) FROM "users"

答案 2 :(得分:0)

User.any?

User.any?  ##  SELECT COUNT(*) FROM "members"

如果Users表中存在记录,则返回true。这意味着,只有在Users表中有true条记录,否则它将返回1 or more,否则会返回false

User.many?

User.many?  ## SELECT COUNT(*) FROM "users"

如果Users表中有true条记录,则返回more than one。这意味着,如果用户表中的记录数为false,它将返回0 or 1

User.exists?(conditions =:none)

User.exists? ## SELECT 1 AS one FROM "users" LIMIT 1

如果Users表中至少有一条记录与给定的true匹配,则返回id or conditions,否则返回false。这一个需要0..1参数。

例如(有条件):

User.exists?(1)  ## SELECT 1 AS one FROM "members" WHERE "members"."id" = 1 LIMIT 1
User.exists?(name: 'XYZ')  ##SELECT 1 AS one FROM "members" WHERE "members"."name" = 'XYZ' LIMIT 1