前提・実現したいこと
Youtubeのリンクを埋め込む機能を実装中に以下のエラーメッセージが発生しました。(今まで進めている中で特にエラーが出ていなかった箇所で今回エラーが急に表示されたので、何か消してしまったのかもしれません)
発生している問題・エラーメッセージ
Showing C:/Desktop/CRUD/app/views/posts/index.html.erb where line #9 raised:
undefined method `each' for nil:NilClass
Extracted source (around line #9):
Ruby
17 <%= link_to "新規投稿へ", new_post_path %> 28 <div class="posts-container"> 39 <% @posts.each do |t| %> 410 <div class="post"> 511 <%= t.user.email %> 612 <%= t.body %> 7 8
エラーメッセージ
NoMethodError in Posts#index
app/views/posts/index.html.erb:9
該当のソースコード
Ruby
1ソースコード app/views/posts/index.html.erb 2Welcome! 3<h1>CRUD</h1> 4<%= link_to "ログイン", posts_path %> 5<%= link_to "新規登録", new_user_registration_path %> 6<%= button_to 'ログアウト', destroy_user_session_path, method: :delete %> 7<h3>Post一覧</h3> 8<%= link_to "新規投稿へ", new_post_path %> 9<div class="posts-container"> 10 <% @posts.each do |t| %> 11 <div class="post"> 12 <%= t.user.email %> 13 <%= t.body %> 14 15 <% if user_signed_in? %> 16 <% if current_user.already_liked?(t) %> 17 <%= link_to post_like_path(id: t.id, post_id: t.id), method: :delete do %> 18 <p>いいねを取り消す</p><%= t.likes.count %> 19 <% end %> 20 <% else %> 21 <%= link_to post_likes_path(id: t.id, post_id: t.id), method: :post do %> 22 <p>いいね</p><%= t.likes.count %> 23 <% end %> 24 <% end %> 25 <% else %> 26 <p>いいねの数 = </p><%= t.likes.count %> 27 <% end %> 28 29 <%= t.created_at %> 30 <%= link_to "詳細へ", post_path(t.id) %> 31 <%= link_to "編集する", edit_post_path(t.id) %> 32 <%= button_to "削除する", post_path(t.id), method: :delete %> 33 34<p id="notice"><%= notice %></p> 35<h4>Posts</h4> 36<table> 37<thead> 38 <tr> 39 <th>Body</th> 40 <th>Youtube url</th> 41 <th colspan="3"></th> 42 </tr> 43</thead> 44 45<tbody> 46 <% @posts.each do |post| %> 47 <tr> 48 <td><%= post.body %></td> 49 <td><iframe width="560" height="315" src="https://www.youtube.com/embed/<%=post.youtube_url%>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></td> 50 <td><%= link_to 'Show', post %></td> 51 <td><%= link_to 'Edit', edit_post_path(post) %></td> 52 <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td> 53 </tr> 54 <% end %> 55<% end %> 56 57 58 59 60```Ruby on Rails 61```ソースコード app/controllers/posts_controller.rb 62class PostsController < ApplicationController 63 before_action :authenticate_user! 64 65 def index 66 @posts = Post.all 67 end 68 69 def link 70 end 71 72 def new 73 @post = Post.new 74 end 75 76 def create 77 post= Post.new(post_params) 78 post.user_id = current_user.id 79 @post = current_user.posts.new(post_params) 80 tag_list = params[:post][:name].split(/[[:blank:]]+/).select(&:present?) 81 @post.user_id = current_user.id 82 if @post.save 83 @post.save_tag(tag_list) 84 redirect_to :action => "index" 85 else 86 redirect_to :action => "new" 87 end 88 end 89 90 91 def show 92 @post = Post.find(params[:id]) 93 @comments = @post.comments 94 @comment = Comment.new 95 end 96 97 def edit 98 @post = Post.find(params[:id]) 99 end 100 101 def update 102 post = Post.find(params[:id]) 103 if post.update(post_params) 104 redirect_to :action => "show", :id => post.id 105 else 106 redirect_to :action => "new" 107 end 108 end 109 110 def destroy 111 post = Post.find(params[:i 112 post.destroy 113 redirect_to action: :index 114 end 115 116 private 117 def post_params 118 params.require(:post).permit(:body) 119 end 120 121 def search 122 @tag = Tag.find(params[:tag_id]) 123 @posts = @tag.posts.all 124 end 125 126 127 before_action :set_post, only: %i[ show edit update destroy ] 128 129 # GET /posts or /posts.json 130 def index 131 @posts = Post.all 132 end 133 134 # GET /posts/1 or /posts/1.json 135 def show 136 end 137 138 # GET /posts/new 139 def new 140 @post = Post.new 141 end 142 143 # GET /posts/1/edit 144 def edit 145 end 146 147 # POST /posts or /posts.json 148 def create 149 @post = Post.new(post_params) 150 url = params[:post][:youtube_url] 151 url = url.last(11) 152 @post.youtube_url = url 153 154 respond_to do |format| 155 if @post.save 156 format.html { redirect_to @post, notice: "Post was successfully created." } 157 format.json { render :show, status: :created, location: @post } 158 else 159 format.html { render :new, status: :unprocessable_entity } 160 format.json { render json: @post.errors, status: :unprocessable_entity } 161 end 162 end 163 end 164 165 # PATCH/PUT /posts/1 or /posts/1.json 166 def update 167 respond_to do |format| 168 if @post.update(post_params) 169 format.html { redirect_to @post, notice: "Post was successfully updated." } 170 format.json { render :show, status: :ok, location: @post } 171 else 172 format.html { render :edit, status: :unprocessable_entity } 173 format.json { render json: @post.errors, status: :unprocessable_entity } 174 end 175 end 176 end 177 178 # DELETE /posts/1 or /posts/1.json 179 def destroy 180 @post.destroy 181 respond_to do |format| 182 format.html { redirect_to posts_url, notice: "Post was successfully destroyed." } 183 format.json { head :no_content } 184 end 185 end 186 187 private 188 # Use callbacks to share common setup or constraints between actions. 189 def set_post 190 @post = Post.find(params[:id]) 191 end 192 193 # Only allow a list of trusted parameters through. 194 def post_params 195 params.require(:post).permit(:body, :youtube_url) 196 end 197end 198 199 200### 試したこと 201 202 203### 補足情報(FW/ツールのバージョンなど) 204 205 206### 前提・実現したいこと 207 208ここに質問の内容を詳しく書いてください。 209(例)PHP(CakePHP)で●●なシステムを作っています。 210■■な機能を実装中に以下のエラーメッセージが発生しました。 211 212### 発生している問題・エラーメッセージ 213
エラーメッセージ
NoMethodError in Posts#index
app/views/posts/index.html.erb:9
該当のソースコード
ソースコード
試したこと
NoMethodErrorはコントローラーの定義ができていないことが原因だと出てきたので見直しましたがどこが間違っているのかわかりません
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー