appirits/comable

View on GitHub
backend/app/controllers/comable/admin/pages_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
require_dependency 'comable/admin/application_controller'

module Comable
  module Admin
    class PagesController < Comable::Admin::ApplicationController
      load_and_authorize_resource class: Comable::Page.name, except: :index, find_by: :slug

      def index
        @q = Comable::Page.ransack(params[:q])
        @pages = @q.result.accessible_by(current_ability).by_newest
      end

      def show
        edit
        render :edit
      end

      def new
      end

      def edit
        set_preview_session
      end

      def create
        @page = Comable::Page.new(page_params)
        @page.slug = @page.normalize_slug(page_params[:slug])

        if @page.save
          redirect_to comable.admin_page_path(@page), notice: Comable.t('successful')
        else
          render :new
        end
      end

      def update
        @page.attributes = page_params
        @page.slug = @page.normalize_slug(page_params[:slug])

        if @page.save
          redirect_to comable.admin_page_path(@page), notice: Comable.t('successful')
        else
          render :edit
        end
      end

      def destroy
        @page.destroy
        redirect_to comable.admin_pages_path, notice: Comable.t('successful')
      end

      private

      def page_params
        params.require(:page).permit(
          :title,            # コンテンツのタイトル
          :content,          # コンテンツ
          :page_title,       # ページのタイトル
          :meta_description, # ディスクリプション
          :meta_keywords,    # キーワード
          :slug,             # スラグ
          :published_at      # 公開日時
        )
      end

      def set_preview_session
        session[Comable::Page::PREVIEW_SESSION_KEY] ||= {}
        session[Comable::Page::PREVIEW_SESSION_KEY][@page.slug] = true
      end
    end
  end
end