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

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

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

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

Q&A

解決済

1回答

1293閲覧

編集、削除の権限を投稿者だけにしたい

kkk11

総合スコア23

Ruby on Rails 5

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

0グッド

1クリップ

投稿2019/01/17 09:30

前提・実現したいこと

ある投稿をしてその投稿を削除、編集する権限を投稿者だけにしたいと考えています。
現在は誰でも編集や削除ができる状態なので改善したいです。
今あるテーブルはpostsテーブル、usersテーブル、commentsテーブルです。

該当のソースコード

posts_controller

class PostsController < ApplicationController before_action :authenticate_user!, only: [:show, :create] def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find(params[:id]) @comment = Comment.new @comments = @post.comments end def new @post = Post.new end def create @post = Post.new(post_params) if @post.save redirect_to post_path(@post) else render 'new' end end def edit @post = Post.find(params[:id]) end def update @post = Post.find(params[:id]) if @post.update(post_params) redirect_to @post else render 'edit' end end def destroy @post = Post.find(params[:id]) @post.destroy redirect_to posts_path end private def post_params params.require(:post).permit(:title, :text, :img, :img_cache, :remove_img) end end end

show.html.erb

<div class="main"> <div class="container mg"> <div class="row"> <!-- cardここから --> <div class="card card-center col-sm-12 col-md-10 col-lg-6"> <div class="card-top"> <ul class="header"> <li class="header-left"> name </li> <li class="header-right"> <%= @post.title %> </li> </ul> </div> <hr /> <div class="card-body"> <div class="card-img"> <%= image_tag @post.img.url, :class => "main-img" if @post.img? %> </div> <hr /> <h6>依頼内容</h6> <hr /> <div class="show-inner"> <div class="card-text"> <%= @post.text %> </div> <div class="show-date"> <ul class="date-fact"> <li> <i class="icon"> <%= fa_icon 'calendar', class: "fa-calendar"%> </i> <time class="post-time"> <%= @post.created_at.to_s(:datetime_base)%> </time> </li> </ul> </div> <!-- この2つを投稿者だけに権限を与えたい。 --> <%= link_to '編集', edit_post_path%> <%= link_to '削除', post_path(@post), method: :delete, data: {confirm: "本当にいいですか"} %>         <!-- ここまで --> </div> </div> </div> <!-- cardここまで --> <div class="comment-body col-sm-12 col-lg-6"> <div class="comment-index"> <h6 class="card-header card-comment font-center">コメント</h6> <%= render 'comments/comment' %> </div> <hr /> <div class="comment-form"> <p class="com-advise font-center">アドバイスを送ってみましょう</p> <%= render 'comments/form' %> </div> </div> </div> </div> </div>

試したこと

show.htmlの削除と編集を
<% if user_signed_in? && @post.user_id == current_user.id %>
<% end %>
で括ってみたがダメだった。

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

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

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

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

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

matsuand

2019/01/18 03:22

これは「ダメ」です。質問の体をなしていません。どう「ダメ」なのか、書かないと・・・
kkk11

2019/01/18 04:04

すいません以後気をつけます。
guest

回答1

0

自己解決

1.Postsテーブルにuser_idカラムを追加する。

2.PostsController/new

def new @post = current_user.posts.build end

3.PostsController/createで以下を記入

@post = current_user.posts.build(post_params)

4.これで作成したpostはpostsテーブルにuser_idが入っている。
5.編集と削除を括る

<% if user_signed_in? && @post.user_id == current_user.id %> 削除、編集 <% end %>

投稿2019/01/18 04:29

kkk11

総合スコア23

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問