【Ruby on Rails】ActiveRecordを使ってランダムなデータを指定した数だけ取得する方法
データの更新作業などで更新結果を確認したい場合に、対象データが多い場合は、全部のデータ見るのは大変なので何件かデータを取得してチェックするなんて場面があるかなと思います。
そんな時にランダムなデータを取得して結果の確認が出来れば便利ですよね。
> Hoge.order("RANDOM()").limit(10)
order("RANDOM()")
でランダムなデータを取得して、limit
で10件取得してます。
条件絞りたい時はwhere
を追加すれば良いですし、必要なカラムだけ表示させたい時はmap
使えば良いですし後は自由ですね。
> Hoge.where(code: 4).order("RANDOM()").limit(10).map{|v| [v.code, v.name]}
という話なのですが、これだとmysql
場合はRAND
にしないといけないなどDBに依存するので宜しくないとアドバイス頂きました!
2行になるけど、改善する方法はpluck
使ってid
だけ取ってきて、それを条件にする方法
> target_ids = Hoge.pluck(:id).sample(5) => [6, 10, 8, 7, 1] > target_ids.class => Array > Hoge.find(target_ids) => [#<Hoge id: 6,.......
こんな感じ