konchanxxx / menta

MENTAのタスク管理用リポジトリ
0 stars 0 forks source link

投稿者だけが編集、削除できる機能を実装したい #71

Closed yuumasakura777 closed 5 years ago

yuumasakura777 commented 5 years ago

概要

現在掲示板サイトを作っており、ログインして投稿した者だけが編集、削除できる機能を実装しようと試みているのですが、エラーが出て困っています。 どのようにすれば、投稿者だけが編集、削除できる機能を実装できるか教えてください。

実現したいこと

投稿者だけが編集、削除できる機能を実装したい。 viewで条件分岐して編集、削除ボタンを投稿者以外には見えなくする方法か、編集、削除ボタンを押したときに、投稿者以外が、権限がありませんと元のホーム画面に戻るなどどちらの機能でも大丈夫です。

困っていること

困っていることがバグの場合は事象やログ、エラーメッセージをできるだけそのまま(抜粋などしない)下記に記載してください。

index.html.erb

<% @posts.each do |post| %>

<%= post.id %> ユーザー : <%= post.user.name %>   <%= post.created_at %>       <%= link_to '編集',edit_post_path(post), class: 'btn btn-primary' %>   <%= link_to '削除',post_path(post), method: :delete, data: { confirm: 'この投稿を削除します。よろしいですか?'}, class: 'btn btn-danger' %>

< % end %>

上記の link toの上でif による条件分岐をしました。

posts_ controller.rb

def edit @post=current_user.posts.find(params[:id]) end

def update @post=current_user.posts.find(params[:id])

if @post.update(post_params)
  redirect_to posts_path
else
  render :edit
end

end

def destroy @post=current_user.posts.find(params[:id])

@post.destroy
redirect_to posts_path

end

application_controller.rb

helper_method :current_user

private

def current_user @current_user =User.find_by(id: session[:user_id]) if session[:user_id] end

解決するために行ったこと

ネットで検索しながらしましたがどれもエラーが出ました。

問題となっている箇所の予想

問題となっているアプリケーションのGitHub URL

konchanxxx commented 5 years ago

確認したいこと

エラーが出て困っています。

具体的にどんなエラーが出ているんでしょうか?

ネットで検索しながらしましたがどれもエラーが出ました。

何を試したのか記載お願いしたいです:bow:

お願いしたいこと

実装の大方針

基本的には権限機能を実装する際に以下の実装要件が含まれると思うのでそこを実現していく必要があります。

自分ならArticle(記事)とかのモデルにauthor?のようなメソッドを生やして投稿者かどうか判定するようにします。

class Article
  def author?(user)
    user_id == user.id
  end
end

controllerではそのメソッドを使って判定するのが良いかなと:bow:

konchanxxx commented 5 years ago

@yuumasakura777

yuumasakura777 commented 5 years ago

仰る通りのことをしたら解決できました。 ありがとうございました。