1

私はモデルを持っています.2つのデータセットを取得し、それらを1つにマージする予定のAdとしましょう。これは可能ですか:

ads = Ad.where(etc).limit(5)

if ads.length < 5
  merge = Ad.where(etc).limit(remainder)

// merge both here
4

1 に答える 1

3

ActiveRecord を使用すると、連鎖を行うことができます。これを試してみてください。1 つのクエリのみが実行されます。

ads = Ad.where(etc).limit(5)
ads = ads.where(etc).limit(remainder)

しかし、あなたの場合、lengthメソッドを呼び出して、2 つのクエリを実行します。ただし、チェーンは引き続き実行できます。ユーザーcountメソッドはメソッドよりも優れています。データベースに送信するlengthためです(高速)。条件に基づいてすべてのレコードをロードし、配列のカウントを行います (低速)。countCOUNT(*)lengthwhere

ads = Ad.where(etc).limit(5)
if ads.count < 5
  ads = ads.where(etc).limit(remainder)
end
于 2012-05-30T17:54:57.193 に答える