平素よりお世話になっております。
Railsでajax通信を用いたコメント機能を実装したいと考えているのですが、コメント入力後に一覧を取ってこれずに困っています。どうやら、index.js.erb
がうまく動いていないようなのですが何が原因か分からず。。
エラー内容
ActionView::Template::Error (undefined method `each' for nil:NilClass): 1: <ul> 2: <% posts.each do |post| %> 3: <li><%= @post.content %></li> 4: <% end %> 5: </ul>
controllers/posts_controller.rb
Ruby
1class PostsController < ApplicationController 2 def create 3 @post = Post.new(create_params) 4 if @post.save 5 render :index 6 end 7 end 8 9 private 10 11 def create_params 12 params.require(:post).permit(:content) 13 end 14end
controllers/home_controller.rb
Ruby
1class HomeController < ApplicationController 2 def index 3 @post = Post.new 4 @posts = Post.all 5 end 6end
views/home/index.html.erb
Ruby
1<div id="postForm"> 2 <%= render partial: 'posts/form', locals: { post: @post } %> 3</div> 4 5<div class="postContainer" id="postArea"> 6 <ul> 7 <%= render partial: 'posts/index', locals: { posts: @posts } %> 8 </ul> 9</div>
views/posts/index.js.erb
Ruby
1$("#postArea").html("<%= j(render 'index', { posts: @posts }) %>") 2$("textarea").val('')
views/posts/_index.html.erb
Ruby
1<ul> 2 <% posts.each do |post| %> 3 <li><%= post.content %></li> 4 <% end %> 5</ul>
views/posts/_form.html.erb
Ruby
1<%= form_with(model: post, url: posts_path) do |f| %> 2 <form> 3 <div class="form-group"> 4 <label for="contents">Content</label> 5 <%= f.text_area :content, class: "form-control", rows: "2" %> 6 </div> 7 <div> 8 <%= f.submit "Submit", type: "submit", class: "btn btn-primary" %> 9 </div> 10<% end %>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/09 06:49