🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

1157閲覧

コメント画面の表示、写真の投稿に対してコメントが書けるページを作りたい。

chihiro7215

総合スコア11

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/12/18 09:51

編集2019/12/18 12:01

前提・実現したいこと

ruby on railsにて写真の投稿にコメントする機能を作成しています。
具体的には、下記の画像のように実装したいです。
イメージ説明
コメント画面を作る際、

ユーザーは写真にコメントを残すことができる
何度でもコメントをすることができる
コメントが空の場合エラーを起こす

上記の設定も行いたいです。

発生している問題・エラーメッセージ

イメージ説明
app/views/comments/new.html.erbに、endとdivを付け加えたらエラーは消えましたが、画面がヘッダー以外、何もない画面が出てきました。

該当のソースコード

app/views/comments/new.html.erb

<div class="topic-index-wrapper"> <div class="container"> <% if @comment_topics.present? %> <% @comment_topics.each do |topic| %> <div class="row"> <div class="col-md-6 col-md-offset-3"> <div class="topic-index-single"> <h2 class="topic-author"> <%= topic.user.name %> </h2> <%= form_for @comment do |f| %> <div class="form-group"> <%= f.label :message %> <%= f.text_area :message, class: "form-control" %> <%= f.hidden_field:topic_id, :value => params[:topic_id] %> <%= image_tag 'icons/comment.png', class: 'topic-index-icon' %> <% if logged_in? %> <%= f.submit "コメント", class: "btn btn-black btn-block" %> <% end %>  <% end %> </div> </div> </div> </div> <% end %> <% end %> </div> </div>

app/views/topics/index.html.erb

<div class="topic-index-wrapper"> <div class="container"> <% @topics.each do |topic| %> <div class="row"> <div class="col-md-6 col-md-offset-3"> <div class="topic-index-single"> <h2 class="topic-author"> <%= topic.user.name %> </h2> <%= image_tag topic.image.url %> <% if !topic.favorite_users.include?(current_user) %> <%= link_to favorites_path(topic_id: topic.id), method: :post do %> <%= image_tag 'icons/heart-black.png', class: 'topic-index-icon' %> <% end %> <% else %> <%= link_to favorites_path(topic_id: topic.id), method: :delete do %> <%= image_tag 'icons/heart-pink.png', class: 'topic-index-icon' %> <% end %> <% end %> <%= topic.favorite_users.count %> <%=link_to new_comment_path(topic_id: topic.id), method: :get do %> <%= image_tag 'icons/comment.png', class: 'topic-index-icon' %> <% end %> <p class="topic-text"> <%= topic.description %> </p> </div> </div> </div> <% end %> </div> </div>

config/routes.rb

Rails.application.routes.draw do get 'topics/new' get 'sessions/new' get 'comments/new' get 'users/new' root 'pages#index' get 'pages/help' root to: "home#index" get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' resources :users resources :topics resources :comments get 'favorites/index' post '/favorites', to: 'favorites#create' delete '/favorites', to: 'favorites#destroy' get 'comments/index' post '/comments', to: 'comment#create' end

app/controllers/comments_controller.rb

class CommentsController < ApplicationController def index @comment_topics = current_user.comment_topics end def new @comment = Comment.new @topic_id = params[:topic_id] end def create @comment = current_user.comments.new(comment_params) if @comment.save redirect_to topics_path, success: 'コメントしました' else flash.now[:danger] = 'コメントに失敗しました' render :new end end private def comment_params params.require(:comment).permit(:user_id, :topic_id,:message) end end

試したこと

app/views/comments/new.html.erbにendとdivを付け加える。
iconの場所に注意してコードを書く。

補足情報(FW/ツールのバージョンなど)

AWS Cloud9
Rails 5.2.3

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

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

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

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

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

guest

回答2

0

私もこういう時はm.tsさんと同じようにします。

<% @comment_topics.each do |topic| %> (1) <div class="row"> (2) <div class="col-md-6 col-md-offset-3">(3) <div class="topic-index-single"> (4) <%= form_for @comment do |f| %> (5) <div class="form-group"> (6) <% if !topic.comment_users.include?(current_user) %>(7) <%= link_to favorites_path(), method: :post do %>(8) <% end %>(8) <% end %>(7) <% if logged_in? %>(7) <% end %> (7) </div> (6) </div> (4) </div> (3)

となり、(1),(5) に対する end と(2)に対する/div が足りないです

投稿2019/12/18 10:43

winterboum

総合スコア23567

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

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

m.ts10806

2019/12/18 10:46

インデントきちんと揃えたら一目瞭然ですね。
winterboum

2019/12/18 10:48

で、 html.erbでは対応つけの確認が注意力期待になってしまうので辛いです。 slim とか haml ですと インデントで階層を表現し、閉じる方は書かずに済むのでこの点では優れています。
winterboum

2019/12/18 10:51

はい、 インデントで対応つけを自動でやってくれるbeatifier があると良いのですが。
guest

0

Ruby分かりませんが、出力部分を全部消してみました。

<% @topics.each do |topic| %> <% if !topic.favorite_users.include?(current_user) %> <% end %> <% else %> <% end %> <% end %> <% end %> <% end %>

むしろ多すぎるのでは?

投稿2019/12/18 10:03

編集2019/12/18 10:08
m.ts10806

総合スコア80875

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

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

chihiro7215

2019/12/18 10:19

<% if !topic.favorite_users.include?(current_user) %>~中略~ は、いいね機能でハートマークの表示、非表示の代わりに、適用されるCSSが切り替わるようにするために書いた出力コードです。 回答に出ているコードは topics/index.html.erbからですか?それとも、comments/new.html.erbからでしょうか?
winterboum

2019/12/18 10:34

そちらは エラーにある new の方ではなく indexの方ですね。 で、 <%= link_to favorites_path(topic_id: topic.id), method: :post do %> があるので合ってます。
m.ts10806

2019/12/18 10:38

Rubyに限った話ではなく、あくまで問題解決の考え方です。 endの数が合ってないなら組み合わせが分かるように最小構成部分だけ残して確かめてみようという話です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問