私はレコード(複数可)が存在するかどうかを確認するためにこれを行うことができますが(IDは「1」が存在するが、「2」と「3」がないと言う):レコードが(配列の配列から)Railsに存在しないかどうかを確認しますか?
Model.exists?(:id => [1, 2, 3]) #=> true
私は反対のことをどのように行うのですか、 so:
Model.not_exists?(:id => [1, 2, 3]) #=> true
私はレコード(複数可)が存在するかどうかを確認するためにこれを行うことができますが(IDは「1」が存在するが、「2」と「3」がないと言う):レコードが(配列の配列から)Railsに存在しないかどうかを確認しますか?
Model.exists?(:id => [1, 2, 3]) #=> true
私は反対のことをどのように行うのですか、 so:
Model.not_exists?(:id => [1, 2, 3]) #=> true
あなただけのIDのいずれかが、ActiveRecord :: RecordNotFound例外をraiseしますfind
方法が存在しない場合は、この
class Model
def self.not_exists?(ids)
self.find(ids)
false
rescue
true
end
end
を試すことができますIDによってレコードを検索する必要がある場合、我々は単にキャッチtrueを返します。
言い訳私の英語:)
オペレータ
!Model.exists?(:id => [1, 2, 3]) #=> true
class Model
def self.does_not_exist?(ids)
Model.where(id: ids).count < ids.size
end
end
説明:すべてのインスタンス(および場合のみ)、あなたが存在を探しているなら、Model.where(id: ids).count
はids.size
に等しいです。
インスタンスが1つ以上存在しない場合、カウントは低くなります。つまり、存在しないレコードが存在することを意味します。
説明があればもっと役に立ちます – R3tep
説明が追加されました。 –
もう1つの簡単な方法は、idの配列でwhereメソッドを使用することです。
# 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
empty?
を使用してください。これは必要なものです。これは、count(*)
とselect 1 as one
を使用します。それをやっての
> Rocketeer.where(:id => [1, 2, 3]).empty?
(0.6ms) SELECT COUNT(*) FROM "rocketeers" WHERE "rocketeers"."id" IN (1, 2, 3)
=> false
> Rocketeer.where(:id => [1, 2, 3]).any?
(0.5ms) SELECT COUNT(*) FROM "rocketeers" WHERE "rocketeers"."id" IN (1, 2, 3)
=> true
> Rocketeer.where(:id => [1, 2, 3]).exists?
Rocketeer Exists (0.5ms) SELECT 1 AS one FROM "rocketeers" WHERE "rocketeers"."id" IN (1, 2, 3) LIMIT 1
=> true
'SELECT 1 AS 1 ... LIMIT 1'は' SELECT COUNT(*) 'より効率的ですか? –
以上のRuby風の道は、exists?
でunless
を使用することです。この方法では、!
を使用する必要はありません。
def my_method
return unless Model.exists?(:id => [1, 2, 3])
# do something
end
あなたは置き換えることができ1, 2, 3
変数(id
か何かをそれを呼び出す)、さらには完全に配列を削除すると、あなたが好きな場合:私は.exists?(id: id)
私はあなたのユースケースは、このようなものであると想像します'2'と' 3'が存在しない場合、どうやってfalseに戻すのかを尋ねる。 '' Model.exists?(:id => [1、2、3]) '' 1 'が存在すれば' false'を返し、 'Model.not_exists?(:id => [1、2、3] ) 'が存在しない場合はtrueを返します。 –
'Model.find(ids_ary).count'それから'レスキューActiveRecord :: RecordNotFound' –