Как мне упростить мой раздел 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

0 ответов

Другие вопросы по тегам