Railsチュートリルでマイクロポストのサンプルを生成するrakeタスクのコードの中を書いていたらrake abortedと怒られる。

namespace :db do
  desc "Fill database with sample data"
  task populate: :environment do
    .
    .
    .
    users = User.all(limit: 6)
    50.times do
      content = Faker::Lorem.sentence(5)
      users.each { |user| user.microposts.create!(content: content) }
    end
  end
end
rake aborted!
ArgumentError: wrong number of arguments (1 for 0)
/home/vagrant/.rbenv/versions/2.1.5/gemsets/RAILS_APP/gems/activerecord-4.1.8/lib/active_record/scoping/named.rb:24:in `all'
/vagrant/RAILS_APP/lib/tasks/sample_data.rake:18:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:populate
(See full trace by running task with --trace)

ん?18行目って事はuser = User.all(limit: 6)の部分?あれおかしいか?おかしい気もするけど……。とりあえずエラー直前の所にbinding.pryを置いてコードを実行してみる。

この機会にとりあえずFaker::Lorem.sentenceを実行してみる。うん、動いてる動いてる。次はUser.allを実行してみる。うん、動いてる。まあここまでは前まで普通に動いていたもんね。

で、実際にlimitを追加してみる。追加する時に思ったんだけど、以前にActiveRecord使ったときはこんな書き方してなかったな。

[4] pry(main)> User.all(limit: 2)
ArgumentError: wrong number of arguments (1 for 0)
from /home/vagrant/.rbenv/versions/2.1.5/gemsets/RAILS_APP/gems/activerecord-4.1.8/lib/active_record/scoping/named.rb:24:in `all'

limitってどう書くっけ。allにそのまま数字だけ渡すっけ?

[5] pry(main)> User.all(6)
ArgumentError: wrong number of arguments (1 for 0)
from /home/vagrant/.rbenv/versions/2.1.5/gemsets/RAILS_APP/gems/activerecord-4.1.8/lib/active_record/scoping/named.rb:24:in `all'

エラー。そうだよな。こんな書き方じゃないわ。あ、思い出した。普通にlimitメソッドだった気がする。

[6] pry(main)> User.all.limit(1)
=> [#<User id: 1, name: "NAME", email: "EMAIL@localhost", created_at: "2015-01-02 11:03:01", updated_at: "2015-01-02 11:03:01", ...

あってた。というわけで、その部分を修正して、再度rake db:resetしてからrake db:populateしてみる。

よし、うまくrakeタスクが完走した。