class ActiveAdmin::ResourceDSL
This is the class where all the register blocks are evaluated.
Private Instance Methods
Source
# 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
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.
Source
# File lib/active_admin/resource_dsl.rb, line 27 def belongs_to(target, options = {}) config.belongs_to(target, options) end
Source
# File lib/active_admin/resource_dsl.rb, line 153 def collection_action(name, options = {}, &block) action config.collection_actions, name, options, &block end
Source
# File lib/active_admin/resource_dsl.rb, line 112 def csv(options = {}, &block) options[:resource] = config config.csv_builder = CSVBuilder.new(options, &block) end
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
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
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
Source
# File lib/active_admin/resource_dsl.rb, line 42 def includes(*args) config.includes.push *args end
Store relations that should be included
Source
# 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
Configure the index page for the resource
Source
# File lib/active_admin/resource_dsl.rb, line 149 def member_action(name, options = {}, &block) action config.member_actions, name, options, &block end
Source
# File lib/active_admin/resource_dsl.rb, line 23 def order_by(column, &block) config.ordering[column] = block end
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
Source
# 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
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
Source
# File lib/active_admin/resource_dsl.rb, line 37 def scope(*args, &block) config.scope(*args, &block) end
Create a scope
Source
# File lib/active_admin/resource_dsl.rb, line 32 def scope_to(*args, &block) config.scope_to(*args, &block) end
Scope
collection to a relation
Source
# File lib/active_admin/resource_dsl.rb, line 91 def show(options = {}, &block) config.set_page_presenter :show, ActiveAdmin::PagePresenter.new(options, &block) end
Configure the show page for the resource