私が見たほとんどの例では、これを行うと、テーブル内の行がカウントされ、ランダムな数値が生成されて1つが選択されます。これは、RAND()
などの代替手段があるためです。 実際にすべての行を取得してランダムな番号を割り当てるという点で非効率的です。つまり、私が読んだことがあります(データベース固有だと思います)。
ここ で見つけたようなメソッドを追加できます。 。
module ActiveRecord
class Base
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
end
end
これにより、使用するモデルにrandom
というメソッドが含まれるようになります。 これは、上記で説明した方法で機能します。テーブル内の行数の範囲内でランダムな数値を生成し、そのランダムな数値に関連付けられた行をフェッチします。つまり、基本的には、フェッチを1回だけ実行します。これは、おそらく好みです:)
このレールプラグイン もご覧ください。 。