質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

2090閲覧

Railsでajax通信を用いたコメント機能を実装したい

k10a

総合スコア35

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/03/08 11:43

編集2020/03/08 22:49

平素よりお世話になっております。

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 %>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

PostsController#indexが必要そうなのに、ありませんね。それに近しいように思えるHomeController#indexがありますが、viewとcontrollerの対応関係は正しいですか?

投稿2020/03/09 03:36

rox

総合スコア179

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k10a

2020/03/09 06:49

ありがとうございます。ご指摘いただいた箇所を確認いたします。
guest

0

自己解決

こちらで解決しました。

controllers/posts_controller.rb

Ruby

1def create 2 @post = Post.new(create_params) 3 if @post.save 4 render :index 5 end 6end

views/posts/_index.html.erb

Ruby

1<ul> 2 <% @posts.each do |post| %> 3 <li><%= post.content %></li> 4 <% end %> 5</ul>

投稿2020/03/09 06:50

k10a

総合スコア35

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問