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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1174閲覧

railsでメモ機能を実装していて、(ログインユーザー)投稿者のみ表示できるようにしたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/05/11 04:34

railsでメモ機能を実装していて、(ログインユーザー)投稿者のみ表示できるようにしたいです。

現在メモ機能を作成していて、ログインユーザー(投稿者)ごとでメモした内容を表示したいのですが、ログインユーザー全員がメモ内容を見れる状態です。ログインユーザーAさんがBさんのメモ内容を見れてしまう状態です。つまり、一覧表示画面で自分だけ見れる状態にしたいです。

## 該当のソースコード

ruby

1class MemosController < ApplicationController 2 3 def index 4 if params[:industry_id] 5 @industrys = Industry.find(params[:industry_id]) 6 @memos = @industrys.post.order(industry_id: :desc).all 7 @memos = User.includes(:user).where(user_id: current_user.id) 8 else 9 @memos = Memo.order(industry_id: :desc).all 10 11 end 12 end 13 14 def new 15 @memo = Memo.new 16 end 17 18 def create 19 @memo = Memo.new(memo_params) 20 if @memo.save 21 redirect_to memos_path 22 else 23 render :new 24 end 25 end 26 27 private 28 29 def memo_params 30 params.require(:memo).permit(:title, :selection_status, :body, :industry_id).merge(user_id: current_user.id) 31 end 32end 33 34app/view/memos/index.html.erb 35 36<body class="back"> 37<div class='memo-info'> 38<div class="industry-category">金融・銀行</div> 39<ul class='memo-lists'> 40<% if user_signed_in? && current_user.id %> 41<% @memos.each do |memo| %> 42 <li class='list'> 43 <% if memo.industry_id == 1 %> 44<div class="card border-info mb-3" style="max-width: 18rem;"> 45 <div class="card-header"><%= memo.title %></div> 46 <div class="card-body text-info"> 47 <h5 class="card-title"><%= memo.selection_status %></h5> 48 <p class="card-text"><%= memo.body %></p> 49 <% else %> 50 <% nil %> 51 </div> 52 <% end %> 53<% end %> 54</li> 55</ul> 56<% end %> 57</div> 58 59<div class='memo-info'> 60<div class="industry-category">不動産・建築</div> 61<ul class='memo-lists'> 62<% @memos.each do |memo| %> 63 <li class='list'> 64 <% if memo.industry_id == 2 %> 65<div class="card border-dark mb-3" style="max-width: 18rem;"> 66 <div class="card-header"><%= memo.title %></div> 67 <div class="card-body text-dark"> 68 <h5 class="card-title"><%= memo.selection_status %></h5> 69 <p class="card-text"><%= memo.body %></p> 70 <% else %> 71 <% nil %> 72 </div> 73 <% end %> 74<% end %> 75</li> 76</ul> 77</div> 78 79</body>

試したこと

view/memos/index.html.erbに<% if user_signed_in? && current_user.id == @memo.user_id %>
<% end %>を使うとundefined method `user_idのエラーが出ますが、そもそもmemos_controllerでDBからオブジェクトを取り出すメソッドを使っていないので、エラーが出ることは把握済みです。

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

上記のDBからオブジェクトを取り出すメソッドをmemos_controllerまたはuser_controllerどちらに記述した方がよろしいですか?
宜しくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

application_controllerにログインユーザーでなければトップページにリダイレクトするようなメソッドを実装しておき、制限をかけたいページに該当するコントローラーのアクションに対して、before_actionで前述のメソッドを指定するのが一般的だと思います多分。

before_actionについてはご存知なければググっていただければすぐにわかると思います。

投稿2021/05/11 04:50

編集2021/05/11 04:51
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2021/05/11 05:10

お忙しい中有難うございます。 before_actionについては知っていたので、より詳しく使えるようにググりながら作成していこうと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問