admins/pageflow/folder.rb
module Pageflow
ActiveAdmin.register Folder, as: 'Folder' do
menu false
actions :new, :create, :edit, :update, :destroy
form do |f|
f.inputs do
if authorized?(:show_account_selection_on, resource) && f.object.new_record?
f.input :account,
collection: AccountPolicy::Scope.new(current_user, Account).folder_addable,
include_blank: false
end
f.input :name
end
f.actions do
f.action(:submit)
f.action(:cancel, wrapper_html: {class: 'cancel'})
end
end
controller do
after_build do |folder|
folder.account ||= account_policy_scope.folder_addable.first || Account.first
end
def create
super do |success|
success.html { redirect_to(admin_entries_path) }
end
end
def update
super do |success, _failure|
success.html { redirect_to(admin_entries_path(folder_id: resource.id)) }
end
end
def destroy
super do |success, _failure|
success.html { redirect_to(admin_entries_path) }
end
end
def permitted_params
result = params.permit(folder: [:name, :account_id]).to_h
restrict_attributes(result[:folder]) if result[:folder]
result
end
private
def account_policy_scope
AccountPolicy::Scope.new(current_user, Account)
end
def restrict_attributes(attributes)
if params[:folder] && params[:folder][:account_id] &&
AccountPolicy::Scope.new(current_user, Account)
.folder_addable.exists?(params[:folder][:account_id]) &&
action_name.to_sym == :create
attributes
else
attributes.except!(:account_id)
end
end
end
end
end