前提・実現したいこと
ここに質問の内容を詳しく書いてください。
現在、rails チュートリアルを利用して学習中です。
13章の中盤あたり、13.3.3 フィードの原型という節の解説でどうしても引っかかる部分があり投稿しました。
本節ではtwitterのような短い投稿フォーム(micropostフォーム)を静的なhomeページに表示させ、その横に投稿の一覧を表示させる(feed_items)という作業をしています。
その文中で、「投稿内容が空欄(投稿が失敗)の際に、render
で同じhomeページを出力する際にエラーが発生する」という解説があります。
現時点では、新しいマイクロポストの作成は図 13.15で示したように期待どおりに動作しています。ただしささいなことではありますが、マイクロポストの投稿が失敗すると、 Homeページは@feed_itemsインスタンス変数を期待しているため、現状では壊れてしまいます。
この部分が理解できずにいます。ですのでその後に続く
最も簡単な解決方法は、リスト 13.50のように空の配列を渡しておくことです。残念ですが、この場合はページ分割されたフィードを返してもうまく動きません。
という一文も理解でできていません。
ご教授いただきたく投稿しました。よろしくお願いします。
(何か記載する情報が足りない場合はご指摘ください)
発生している問題・エラーメッセージ
undefined method `any? for nil:NilClass
エラー個所は
<% if @feed_items.any? %>
で、解説の
Homeページは@feed_itemsインスタンス変数を期待しているため、現状では壊れてしまいます。
という言葉と一致していると思われます。
undefined method any? for nil:NilClass
というエラーが出ているということは、@feed_itemsがnilになっているということだと思うのですが、なぜnilになってしまうのかが知りたいです。
render
でhomeページを表示
該当のソースコード
home.html.erb (homeページのソース)
html
1<% if logged_in? %> 2 <div class="row"> 3 <aside class="col-md-4"> 4 <section class="user_info"> 5 <%= render 'shared/user_info' %> 6 </section> 7 <section class="micropost_form"> 8 <%= render 'shared/micropost_form' %> 9 </section> 10 </aside> 11 <div class="col-md-8"> 12 <h3>Micropost Feed</h3> 13 <%= render 'shared/feed' %> 14 </div> 15 </div> 16<% else %> 17 . 18 . 19 . 20<% end %>
<%= render 'shared/feed' %>のパーシャル
ruby
1 2<% if @feed_items.any? %> 3 <ol class="microposts"> 4 <%= render @feed_items %> 5 </ol> 6 <%= will_paginate @feed_items %> 7<% end %> 8
homeコントローラー(@feed_itemsの定義があります)
ruby
1 def home 2 if logged_in? 3 @micropost = current_user.microposts.build 4 @feed_items = current_user.feed.paginate(page: params[:page]) 5 end
上記コード、feed
メソッド部分(User model)
ruby
1 def feed 2 Micropost.where("user_id = ?", id) 3 end
micropostを作成する際のcreateアクションの定義
ruby
1class MicropostsController < ApplicationController 2 before_action :logged_in_user, only: [:create, :destroy] 3 4 def create 5 @micropost = current_user.microposts.build(micropost_params) 6 if @micropost.save 7 flash[:success] = "Micropost created!" 8 redirect_to root_url 9 else #投稿が失敗 10 @feed_items = [] #これを挿入しないとエラーが出る 11 render 'static_pages/home' 12 end
試したこと
何回かキーワードになりそうな単語を使い調べてみたのですが(render rails 変数,, etc)わかりませんでした。
ものすごく基本的なことを質問してしまっていそうで怖いのですが、ご回答いただければ幸いです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

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