Rails Tutorialの2周目を進めています。
13.3.3 フィードの原型 で、フィードの実装は問題なく済んでいるのですが、チュートリアルの説明として理解できない部分があるので質問させてください。
現時点では、新しいマイクロポストの作成は図 13.15で示したように期待どおりに動作しています。ただしささいなことではありますが、マイクロポストの投稿が失敗すると、 Homeページは@feed_itemsインスタンス変数を期待しているため、現状では壊れてしまいます。最も簡単な解決方法は、リスト 13.50のように空の配列を渡しておくことです。残念ですが、この場合はページ分割されたフィードを返してもうまく動きません。動かない理由を確認したい方は、実際に実装してページネーションのリンクをクリックしてみてください。
この解説の、「マイクロポストの投稿が失敗すると@feed_itemsインスタンス変数を期待しているため、現状では壊れてしまいます」という部分が、
<% if @feed_items.any? %> ->undefined method `any?' for nil:NilClass
このようなエラーとなるのは確認しているのですが、なぜエラーになるのかがわかりません。
@feed_itemsには既に「app/controllers/static_pages_controller.rb」の
@feed_items = current_user.feed.paginate(page:params[:page])
でログインしているユーザーのマイクロポストが入っているので、nilではないのでは・・・?と思ってしまいます。
どうぞよろしくお願いします。
###ソースコード
app/models/user.rb
class User < ApplicationRecord . . . # 試作feedの定義 # 完全な実装は次章の「ユーザーをフォローする」を参照 def feed Micropost.where("user_id = ?", id) end private . . . end
app/controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController def home if logged_in? @micropost = current_user.microposts.build @feed_items = current_user.feed.paginate(page: params[:page]) end end def help end def about end def contact end end
app/views/shared/_feed.html.erb
<% if @feed_items.any? %> <ol class="microposts"> <%= render @feed_items %> </ol> <%= will_paginate @feed_items %> <% end %>
app/views/static_pages/home.html.erb
<% if logged_in? %> <div class="row"> <aside class="col-md-4"> <section class="user_info"> <%= render 'shared/user_info' %> </section> <section class="micropost_form"> <%= render 'shared/micropost_form' %> </section> </aside> <div class="col-md-8"> <h3>Micropost Feed</h3> <%= render 'shared/feed' %> </div> </div> <% else %> . . . <% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/19 12:12
2019/04/19 12:17
2019/04/19 12:29
2019/04/21 08:22