###前提・実現したいこと
Railsチュートリアルのリスト11.26: ユーザーと関連付けされたマイクロポストのfixtureを生成する部分で、テスト(後述)を実行するとエラーが発生します。
原因は理解できていますが、解決方法が分かりかねています。
該当チュートリアルページ:http://railstutorial.jp/chapters/user_microposts?version=4.2#cha-user_microposts
ポストされた投稿が30件以上になるとページャーが生成されるのですが、それを確認するテストです。
###発生している問題・エラーメッセージ
ERROR["test_profile_display", UsersProfileTest, 2016-06-27 05:55:35 +0000] test_profile_display#UsersProfileTest (1467006935.95s) ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid: SQLite3::SQLException: table microposts has no column named micropost_0: INSERT INTO "microposts" ("content", "created_at", "micropost_0", "micropost_1", "micropost_2", "micropost_3", "micropost_4", "micropost_5", "micropost_6", "micropost_7", "micropost_8", "micropost_9", "micropost_10", "micropost_11", "micropost_12", "micropost_13", "micropost_14", "micropost_15", "micropost_16", "micropost_17", "micropost_18", "micropost_19", "micropost_20", "micropost_21", "micropost_22", "micropost_23", "micropost_24", "micropost_25", "micropost_26", "micropost_27", "micropost_28", "micropost_29", "updated_at", "id", "user_id") VALUES ('Rem eligendi totam est sed ut dolore consectetur vitae.', '2016-05-16 13:15:37 UTC', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2016-06-27 13:15:38', 941832919, 762146111)
※このテスト以外の50個ほどのテストでも同じエラーが発生します。
###該当のソースコード
ページャーを表示させるために30個以上のテストデータをFaker::Loremとtimesメソッドを利用し、生成しているのが以下のコードです。
Ruby
1microposts.yml 2<% 30.times do |n| %> 3micropost_<%= n %>: 4content: <%= Faker::Lorem.sentence(5) %> 5created_at: <%= 42.days.ago %> 6user: michael 7<% end %>
Ruby
1users.yml 2michael: 3 name: Michael Example 4 email: michael@example.com 5 password_digest: <%= User.digest('password') %> 6 admin: true 7 activated: true 8 activated_at: <%= Time.zone.now %>
テストコードは以下の通りです。
Ruby
1def setup 2 @user = users(:michael) 3end 4 5test "profile display" do 6 get user_path(@user) 7 assert_template 'users/show' 8 assert_select 'title', full_title(@user.name) 9 assert_select 'h1', text: @user.name 10 assert_select 'h1>img.gravatar' 11 assert_match @user.microposts.count.to_s, response.body 12 assert_select 'div.pagination' 13 @user.microposts.paginate(page: 1).each do |micropost| 14 assert_match micropost.content, response.body 15 end 16end
エラーの内容は理解出来ています。
micropostsテーブルにはmicropost_0というカラムはありません。という意味です。
事実、そのようなカラムはありません。
###試したこと
micropostそのものを量産したいのになぜかmicropostの中にmicropostを作るような感じになっているのだと理解し、以下の通り、Faker::Loremに頼らずに、自分でテストデータを数十個直書きしました。
Ruby
1most_recent1: 2content: "Writing a short test" 3created_at: <%= 42.days.ago %> 4user: michael 5 6most_recent2: 7content: "Writing a short test" 8created_at: <%= 42.days.ago %> 9user: michael
結果、自分でテストデータを書いた場合は、問題なくテストを通過しました。
最初にテストでエラーになったのと今回の違いは、以下の部分です。
Ruby
1microposts.yml 2<% 30.times do |n| %> 3micropost_<%= n %>: 4content: <%= Faker::Lorem.sentence(5) %> 5created_at: <%= 42.days.ago %> 6user: michael 7<% end %>
この部分を直書きしただけです。つまり、問題はこの部分にあると思っているのですが、どうにも解決策が見出だせません。。。
お手数ですが、どなたかご教授頂ければ幸いです。
(また、もし不足している情報などがあれば仰って頂けると助かります。)
###補足情報(言語/FW/ツール等のバージョンなど)
言語:Ruby on Rails

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/27 16:33