class ActiveAdmin::ResourceDSL

This is the class where all the register blocks are evaluated.

Private Instance Methods

action(set, name, options = {}, &block) click to toggle source

Member Actions give you the functionality of defining both the action and the route directly from your ActiveAdmin registration block.

For example:

ActiveAdmin.register Post do
  member_action :comments do
    @post = Post.find(params[:id])
    @comments = @post.comments
  end
end

Will create a new controller action comments and will hook it up to the named route (comments_admin_post_path) /admin/posts/:id/comments

You can treat everything within the block as a standard Rails controller action.

# File lib/active_admin/resource_dsl.rb, line 137
def action(set, name, options = {}, &block)
  warn "Warning: method `#{name}` already defined in #{controller.name}" if controller.method_defined?(name)

  set << ControllerAction.new(name, options)
  title = options.delete(:title)

  controller do
    before_action(only: [name]) { @page_title = title } if title
    define_method(name, &block || Proc.new {})
  end
end
belongs_to(target, options = {}) click to toggle source
# File lib/active_admin/resource_dsl.rb, line 27
def belongs_to(target, options = {})
  config.belongs_to(target, options)
end
collection_action(name, options = {}, &block) click to toggle source
# File lib/active_admin/resource_dsl.rb, line 153
def collection_action(name, options = {}, &block)
  action config.collection_actions, name, options, &block
end
csv(options = {}, &block) click to toggle source

Configure the CSV format

For example:

csv do
  column :name
  column("Author") { |post| post.author.full_name }
end

csv col_sep: ";", force_quotes: true do
  column :name
end
# File lib/active_admin/resource_dsl.rb, line 112
def csv(options = {}, &block)
  options[:resource] = config

  config.csv_builder = CSVBuilder.new(options, &block)
end
decorate_with(decorator_class) click to toggle source
# File lib/active_admin/resource_dsl.rb, line 157
def decorate_with(decorator_class)
  # Force storage as a string. This will help us with reloading issues.
  # Assuming decorator_class.to_s will return the name of the class allows
  # us to handle a string or a class.
  config.decorator_class_name = "::#{ decorator_class }"
end
form(options = {}, &block) click to toggle source
# File lib/active_admin/resource_dsl.rb, line 95
def form(options = {}, &block)
  config.set_page_presenter :form, ActiveAdmin::PagePresenter.new(options, &block)
end
includes(*args) click to toggle source

Store relations that should be included

# File lib/active_admin/resource_dsl.rb, line 42
def includes(*args)
  config.includes.push *args
end
index(options = {}, &block) click to toggle source

Configure the index page for the resource

# File lib/active_admin/resource_dsl.rb, line 85
def index(options = {}, &block)
  options[:as] ||= :table
  config.set_page_presenter :index, ActiveAdmin::PagePresenter.new(options, &block)
end
member_action(name, options = {}, &block) click to toggle source
# File lib/active_admin/resource_dsl.rb, line 149
def member_action(name, options = {}, &block)
  action config.member_actions, name, options, &block
end
order_by(column, &block) click to toggle source

Redefine sort behaviour for column

For example:

# nulls last
order_by(:age) do |order_clause|
  [order_clause.to_sql, 'NULLS LAST'].join(' ')  if order_clause.order == 'desc'
end

# by last_name but in the case that there is no last name, by first_name.
order_by(:full_name) do |order_clause|
  ['COALESCE(NULLIF(last_name, ''), first_name), first_name', order_clause.order].join(' ')
end
# File lib/active_admin/resource_dsl.rb, line 23
def order_by(column, &block)
  config.ordering[column] = block
end
permit_params(*args, &block) click to toggle source

Keys included in the ‘permitted_params` setting are automatically whitelisted.

Either

permit_params :title, :author, :body, tags: []

Or

permit_params do
  defaults = [:title, :body]
  if current_user.admin?
    defaults + [:author]
  else
    defaults
  end
end
# File lib/active_admin/resource_dsl.rb, line 64
def permit_params(*args, &block)
  param_key = config.param_key.to_sym

  controller do
    define_method :permitted_params do
      belongs_to_param = active_admin_config.belongs_to_param
      create_another_param = :create_another if active_admin_config.create_another

      permitted_params =
        active_admin_namespace.permitted_params +
          Array.wrap(belongs_to_param) +
          Array.wrap(create_another_param)

      params.permit(*permitted_params, param_key => block ? instance_exec(&block) : args)
    end

    private :permitted_params
  end
end
scope(*args, &block) click to toggle source

Create a scope

# File lib/active_admin/resource_dsl.rb, line 37
def scope(*args, &block)
  config.scope(*args, &block)
end
scope_to(*args, &block) click to toggle source

Scope collection to a relation

# File lib/active_admin/resource_dsl.rb, line 32
def scope_to(*args, &block)
  config.scope_to(*args, &block)
end
show(options = {}, &block) click to toggle source

Configure the show page for the resource

# File lib/active_admin/resource_dsl.rb, line 91
def show(options = {}, &block)
  config.set_page_presenter :show, ActiveAdmin::PagePresenter.new(options, &block)
end