rails初心者です。
現在、ログインしたuserが店(spot)のレビューコメントを投稿できる機能を作っていますが、投稿した内容を表示できずに困っています。
以下を参考に
https://sadah.github.io/rails-training/ja/004_comments.html
~~userモデル、spotモデルと、投稿するコメント用のcommentモデルを用意しそれぞれ紐づけています。
~~
12/7追記 上記は解決しましたが現在コメントを投稿した User名が表示できず困っています。
解決方法の欄に詳細を記入しております
user
1・・・ 2has_many :spots 3has_many :comments 4・・・
spot
1class Spot < ApplicationRecord 2 validates :name, presence: true, length: { maximum: 50 } 3 validates :address, presence: true, length: { maximum: 100 } 4 validates :description, presence: true, length: { maximum: 255 } 5 6 belongs_to :user, optional: true 7 has_many :comments 8end
comment
1class Comment < ApplicationRecord 2 belongs_to :user, optional: true 3 belongs_to :spot, optional: true 4 validates :content, presence: true, length: { maximum: 500 } 5end
comment作成のcreateアクションは、
class CommentsController < ApplicationController before_action :require_user_logged_in def create @comment = Comment.new(comment_params) if @comment.save flash[:success] = 'コメントを投稿しました。' redirect_to root_url else flash.now[:danger] = "コメントに失敗しました。" render 'toppages/index' end end def destroy end private def comment_params params.require(:comment).permit(:content) end end
spots_controllerのshowアクション
def show @spot = Spot.find(params[:id]) @comments = @spot.comments.includes(:user).order(id: :desc).page(params[:page]) @comment = @spot.comments.build(user_id: current_user.id) if current_user end
コメントの表示用にview/comments/_reviw.html.erbを作成
<ul class="list-unstyled"> <% comments.each do |comment| %> <li class="media mb-3"> <img class="mr-2 rounded" src="<%= gravatar_url(comment.user, { size: 50 }) %>" alt=""> <div class="media-body"> <div> <%= link_to comment.user.name, user_path(comment.user) %> <span class="text-muted">posted at <%= comment.created_at %></span> </div> <div> <p><%= comment.content %></p> </div> </div> </li> <% end %> <%= paginate comments %> </ul>
view/spot/show.html.erb
<h1 class="text-center mb-5"><%= @spot.name %></h1> <article class="mt-5"> <table class="mb-5"> <tbody> <tr> <td>住所</td> <td><%= @spot.address %></td> </tr> </tbody> </table> <h3><%= @spot.name%>の情報</h3> <p><%= @spot.description %></p> </article> <!--レビューコメント--> <% if logged_in? %> <div class="row"> <aside class="col-sm-4"> <%= form_with(model: @comment, local: true) do |f| %> <div class="form-group"> <%= f.text_area :content, class: 'form-control', rows: 5 %> </div> <%= f.submit 'Post', class: 'btn btn-primary btn-block' %> <% end %> </aside> <div class="col-sm-8"> <%= render 'comments/review', comments: @comments %> </div> </div> <% else %> <div class="text-center"> <h1>会員登録で口コミができます!</h1> <%= link_to 'Sign up now!', signup_path, class: 'btn btn-lg btn-primary' %> </div> <% end %>
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。