Как мне упростить мой раздел before_action: Rails 5
Я думаю, что в своем контроллере я немного усложнил раздел before_action с повторяющимися кодами, верно? Как я могу упростить это?
Я нуждаюсь:
- Админ для доступа ко всему (добавлять / редактировать / удалять сообщения)
- пользователь для публикации
- пользователь может редактировать собственные сообщения
- кто угодно (вошел или не вошел), чтобы увидеть все сообщения
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy, :like, :unlike, :approve]
before_action :check_loggedin, only: [:new, :like, :unlike, :manage_posts]
before_action :post_owner, only: [:edit, :update, :destroy]
before_action :check_admin, only: [:manage_posts]
before_action :authenticate_user!, only: [:new, :edit, :update, :destroy]
...
private
def set_post
@post = Post.friendly.find(params[:id])
rescue ActiveRecord::RecordNotFound
flash[:notice] = "That post doesn't exists!"
redirect_to :action => 'index'
end
def post_params
params.require(:post).permit(:title, :description, :image, :category_id, :user_id, :tag_list, :source_url, :live_title, :live_url, :is_approved)
end
def check_loggedin
if user_signed_in? == false
redirect_to root_path
end
end
def check_admin
if current_user.try(:is_admin?) == false
redirect_to root_path
end
end
def post_owner
unless @post.user_id == current_user.id || current_user.is_admin?
flash[:notice] = "That is not your post."
redirect_to root_path
end
end