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

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

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

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

Q&A

0回答

222閲覧

リロードしないとコメントが反映されない

KC63

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2020/12/21 01:10

rialsでtwitterのようなものを作っています。 非同期でコメント機能作ったを際にリロードしないとコメントが反映されない事で詰まっています。 ### 発生している問題・エラーメッセージ ActionView::Template::Error (No route matches {:action=>"show", :controller=>"users", :id=>nil}, missing required keys: [:id]): 12: <%= image_tag comment.user.image, style: "width: 60px; border-radius: 50%;" %> 13: </div> 14: <div class="comment-text"> 15: <p><%= link_to "@#{comment.user.name}", user_path(@user) %></p> 16: <div class="comment-entry"> 17: <%= comment.content %> 18: <% if comment.user == current_user %>

該当のソースコード

UsersController

1class UsersController < ApplicationController 2 before_action :redirect_loggedin_user, only: [:new, :create] 3 before_action :redirect_unlogin_user, only: :show 4 5 def new 6 @user = User.new 7 end 8 9 def create 10 @user = User.new(user_params) 11 if @user.save 12 session[:user_id] = @user.id 13 redirect_to new_profile_path, notice: "サインインしました" 14 else 15 render :new 16 end 17 end 18 def show 19 @user = User.find(params[:id]) 20 end 21 22 private 23 24 def user_params 25 params.require(:user).permit(:email, :password, :password_confirmation) 26 end 27end 28

user

1class User < ApplicationRecord 2 has_secure_password 3 validates :email, presence: true, uniqueness: true 4 has_one :profile, dependent: :destroy 5 has_many :posts, dependent: :destroy 6 has_many :likes 7 def liked_by?(post_id) 8 likes.where(post_id: post_id).exists? 9 end 10 11 has_many :comments, dependent: :destroy 12 delegate :name, :study, :purpose, :image, to: :profile 13

PostsController

1class PostsController < ApplicationController 2 before_action :redirect_unlogin_user 3 before_action :find_post, only:[:edit, :update, :destroy] 4 before_action :find_public_post, only:[:show] 5 6 def index 7 @posts = Post.all.order(created_at: :desc) 8 @post = current_user.posts.new 9 end 10 11 def show 12 @post = Post.find(params[:id]) 13 @comment = Comment.new 14 @comments = @post.comments.order(created_at: :desc) 15 end 16 17 def edit 18 end 19 20 def new 21 return redirect_to new_profile_path, alert: "プロフィールの登録をしてください" if current_user.profile.blank? 22 @post = Post.new 23 end 24 25 def create 26 @post = Post.new(post_params) 27 @post.user_id = current_user.id 28 if @post.save 29 redirect_to root_path, notice: "投稿しました" 30 else 31 render :new 32 end 33 end 34 35 def update 36 if @post.update(post.params) 37 redirect_to root_path, notice: "投稿を更新しました" 38 else 39 render :edit 40 end 41 end 42 43 def destroy 44 if @post.destroy 45 redirect_to root_path, notice: "削除しました" 46 else 47 redirect_to root_path, alert: "削除できませんでした" 48 end 49 end 50 51 def post_params 52 params.require(:post).permit(:content, images: []).tap do |v|v[:user_id] = session[:user_id] 53 end 54 end 55 56 private 57 58 def find_post 59 @post = Post.where(user_id: session[:user_id]).find(params[:id]) 60 @user = User.find(@post.user_id) 61 end 62 63 def find_public_post 64 @post = Post.find(params[:id]) 65 @user = User.find(@post.user_id) 66 end 67end 68

試したこと

IDが上手く渡せていないのが原因みたいなのですが、独学初心者なのでどこを修正したらよいか分からないのでアドバイス頂けると有り難いです。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問