检查Rails中是否存在记录(来自ID数组)?

时间:2010-12-01 16:28:42

标签: sql ruby-on-rails

我可以这样做来检查记录是否存在(比如说“1”存在,但“2”和“3”不存在):

Model.exists?(:id => [1, 2, 3]) #=> true

我如何做相反的事情,所以:

Model.not_exists?(:id => [1, 2, 3]) #=> true

6 个答案:

答案 0 :(得分:27)

只需添加一个!操作

!Model.exists?(:id => [1, 2, 3]) #=> true

答案 1 :(得分:5)

如果您只需要通过ID搜索记录,可以试试这个

class Model
  def self.not_exists?(ids)
    self.find(ids)
    false
  rescue
    true
  end
end

如果任何ID不存在,find方法将引发一个ActiveRecord :: RecordNotFound异常,我们只是捕获并返回true。

原谅我的英文:)

答案 2 :(得分:1)

class Model
  def self.does_not_exist?(ids)
    Model.where(id: ids).count < ids.size
  end
end

说明:如果(且仅当)您要查找的所有实例都存在,Model.where(id: ids).count等于ids.size

但是,如果缺少一个或多个实例,则计数会更低,这意味着记录不存在。

答案 3 :(得分:1)

使用<link rel="stylesheet" type="text/css" media="all" href="/webjars/bootstrap-datepicker/1.3.1/css/datepicker.css" /> <script type="text/javascript" src="/webjars/bootstrap-datepicker/1.3.1/js/bootstrap-datepicker.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.date').datepicker({format: "mm/dd/yyyy", weekStart: "0"}); }); </script> ,这就是你想要的。它使用empty? vs count(*)

select 1 as one

答案 4 :(得分:1)

更实用的Ruby方法是将unlessexists?一起使用。这样,您就不必使用!。我想你的用例是这样的:

def my_method
    return unless Model.exists?(:id => [1, 2, 3])

    # do something
end

您可以将1, 2, 3替换为变量(称之为id或其他内容),如果您愿意,甚至可以完全删除数组:.exists?(id: id)

答案 5 :(得分:0)

另一种简单的方法是将where方法与id的数组一起使用。

# If the count of the query is equal to the count of all of the id's then the statement will return false.
# Else it will return true if not all ids exists in the database.
Model.where(id: [1, 2, 3]).count < [1,2,3].count