ネット偽善者でもいいじゃない

悩んでるなら面白いマンガ読もう

railsチュートリアル10章

リスト10.20サンプルデータにマイクロポスト用のコードを追加する。ではまる

リスト10.20の通りにマイクロソフト投稿のコードをFaker(バージョン1.4.3)を使って記述するけど エラーが出てしまう・・・ エラーとしては、ターミナル上で、

$ bundle exec rake db:populate をした後に下記のエラーが出た

/Users/xxx/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.4/lib/active_record/scoping/named.rb:24:in all' /Users/xxx/sample_app/lib/tasks/sample_data.rake:23:inblock (2 levels) in ' /Users/xxx/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in eval' /Users/xxx/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in

'

と出てしまう どうやらアクティブレコードに 'all' なんてパラメーターはないよ、ってことらしい 参考↓ ruby on rails - wrong number of arguments (1 for 0) Hartl chapter 10...bundle exec rake db:populate - Stack Overflow

なので、上記のリンク通りに

User.all(limit:6) ではなく

User.limit(6) としてやればちゃんとマイクロソフトが投稿されました良かった

一応、マイクロソフトがちゃんと投稿されたsample_data.rakeを記述しておきます

namespace :db do
    desc "Fill database with sample data"
    task populate: :environment do
        admin = User.create!(
            name: "Example User",
            email: "example@railstutorial.jp",
            password: "foobar",
            password_confirmation: "foobar",
            admin: true
            )
        99.times do |n|
            name = Faker::Name.name
            email = "example-#{n+1}@railstutorial.jp"
            password = "password"
            User.create!(
                name: name,
                email:email,
                password: password,
                password_confirmation: password
                )
        end

        users = User.limit(6)
        50.times do
            content = Faker::Lorem.sentence(5)
            users.each{|user| user.microposts.create!(content: content)}
        end
    end   
end

自分はgemのバージョンを指定せずに色々やってるので ちょいちょい今まで引っかかってます(^_^;) (Fakerはバージョン1.4.3です) バージョンのせいなのかもしれないけどとりあえず動いて良かった