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:in
block (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です) バージョンのせいなのかもしれないけどとりあえず動いて良かった