おぴよの気まぐれ日記

おぴよの気まぐれ日記

岡山やプログラミング、ファッションのこと、子育てや人生、生き方についての備忘録。

【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,.......

こんな感じ