本質的ではないが、Ruby on Rails チュートリアル 第10章 ユーザーの更新・表示・削除で少しハマった点があったので、備忘までに記載しておく。
環境面は基本的に推奨のものをそのまま使用しているので、開発環境はAWS Cloud9。各種gemのバージョンも推奨通り。
ハマった点
User.paginate
は、:page
パラメーターに基いて、データベースからひとかたまりのデータ (デフォルトでは30) を取り出します。
$ rails console >> User.paginate(page: 1) User Load (1.5ms) SELECT "users".* FROM "users" LIMIT 30 OFFSET 0 (1.7ms) SELECT COUNT(*) FROM "users" => #<ActiveRecord::Relation [#<User id: 1,...
とのことなので、試してみたら、
>> user = User.paginate(page: 1) User Load (0.2ms) SELECT "users".* FROM "users" LIMIT ? OFFSET ? [["LIMIT", 11], ["OFFSET", 0]] (0.1ms) SELECT COUNT(*) FROM "users" => #<ActiveRecord::Relation [#<User id: 1,...
となった。
良く見ると、LIMITが、'30'じゃなくて'11'なのですがなぜ???となった。
画面上は100件が4ページになっているし、記載の通りデフォルトが30件になっているのだが、コンソール上ではデフォルトが11件になっている?となって、追加したgemのバージョン違い等を疑ったが、特に問題なさそうだった。
結論
ググったら、一応なんとなくは分かった。
まさしくじゃないですか。
で、回答は、
と、別のサイトに飛ばされたので、見てみると、
とのことで、ちゃんとした回答にはなっていないようだが、コンソールでは「to_a」というメソッドを使わなければいけないらしい。
試してみると、確かに30件取得出来た。
>> user = User.paginate(page: 1).to_a User Load (0.3ms) SELECT "users".* FROM "users" LIMIT ? OFFSET ? [["LIMIT", 30], ["OFFSET", 0]] (0.1ms) SELECT COUNT(*) FROM "users" => [#<User id: 1,...
コンソールの仕様なのだろうか、根本の原因はいまだにわかっていないが、とりあえず今の自分にはこのレベルの回答で十分と判断。これ以上の深追いはしない。もし根本的な原因をご存じの方がいたら、お教えいただけると嬉しい。