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

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

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

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

Ruby

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

Q&A

解決済

1回答

769閲覧

トップページに、ログインユーザーの投稿したコメントのみ表示したい

kokosi1062

総合スコア39

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2020/04/06 09:56

前提・実現したいこと

railsで、自分辞書アプリとなるものを作成しています。
現段階、トップページ('memos#index')では、全てのユーザーが投稿したコメントが全て表示されています。
マイページ(/users/:id)では、ログインしたユーザーが投稿したコメントのみの表示が出来ています。
ここまで問題なく機能、表示が出来ています。

希望は、トップページにログインしたユーザーが投稿したコメントのみ表示
マイページに全てのユーザーが投稿したコメント表示です。

上記の2ページを交換すれば解決と考えていてビューのみで交換してみましたが、複雑なエラーが出ました。
root toをトップページ→マイページに修正でも良いのかと考えて今に至ります。

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

memosテーブルにはuser_idと紐付けが出来ております。

エラーメッセージ

ActiveRecord::RecordNotFound in UsersController#show Couldn't find User without an ID Extracted source (around line #3) 1class UsersController < ApplicationController 2 def show **3 user = User.find(params[:id])** 4 @nickname = current_user.nickname 5 @memos = current_user.memos 6 end

該当のソースコード

rails

1Rails.application.routes.draw do 2 root to: 'memos#index' 3 4 resources :memos, only: [:index, :new, :show, :create, :edit, :update, :destroy] do 5 collection do 6 get 'search' 7 end 8 end 9 10 devise_for :users 11 resources :users, only: :show 12 13end 14 15

rails

1class UsersController < ApplicationController 2 def show 3 user = User.find(params[:id]) 4 @nickname = current_user.nickname 5 @memos = current_user.memos 6 end 7end 8

rails

1class MemosController < ApplicationController 2 3 before_action :move_to_index, except: [:index, :show, :search] 4 5 def index 6 @memos = Memo.all 7 end 8 9 def new 10 @memo = Memo.new 11 12 13 end 14 15 def edit 16 @memo = Memo.find(params[:id]) 17 end 18 19 def update 20 memo = Memo.find(params[:id]) 21 memo.update(memo_params) 22 redirect_to memo_path(memo.id) 23 end 24 25 def destroy 26 memo = Memo.find(params[:id]) 27 memo.destroy 28 redirect_to root_path 29 end 30 31 def create 32 Memo.create(memo_params) 33 end 34 35 def show 36 @memo = Memo.find(params[:id]) 37 end 38 39 def search 40 @memos = Memo.search(params[:keyword]) 41 end 42 43 44 private 45 def memo_params 46 params.require(:memo).permit(:title, :text, :url).merge(user_id: current_user.id) 47 48 end 49 50 def move_to_index 51 redirect_to action: :index unless user_signed_in? 52 end 53end

試したこと

マイページとなるものはrails routesで確認すると
user GET /users/:id(.:format) users#showとなります。

root to: 'users#show'に修正したところ、上記のエラーが表示されました。
idが書いてないからエラーと思うのですが、書き方を調べてみましたが、
見当たらなかったので、質問させていただきました。
分かりづらく申し訳ないですが、ご教示いただけますと幸いです。
宜しくお願いします。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

root to: 'memos#index' を root to: 'users#show' に変更したらエラーが出たということでしょうか?
ですと出ますね。users#show は パラメータにユーザIDが必要ですから。

Topページというのはloginする前に表示されるところだと思うので、
>トップページにログインしたユーザーが投稿したコメントのみ表示
の「ログインしたユーザーが」が存在しませんが、そこはどうします?

仮に、ログインしていないと ログイン画面に誘導され、ログインすると Topに行くということでしょうか?
でしたら
def show user = User.find_by(params[:id]) || current_user
でしょうか

投稿2020/04/06 13:00

winterboum

総合スコア23347

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

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

kokosi1062

2020/04/07 07:20

ご回答いただきありがとうございます。 盲点でした。確かに、何も表示されていないトップページとなるものが存在していませんでした。 解決策が見えてきたので、引き続き作成してまいります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問