Module: ActiveAdmin::Resource::ScopeTo

Included in:
ActiveAdmin::Resource
Defined in:
lib/active_admin/resource/scope_to.rb

Instance Method Summary collapse

Instance Method Details

#scope_to(*args, &block) ⇒ Object

Scope this controller to some object which has a relation to the resource. Can either accept a block or a symbol of a method to call.

Eg:

ActiveAdmin.register Post do
  scope_to :current_user
end

Then every time we instantiate and object, it would call

current_user.posts.build

By default Active Admin will use the resource name to build a method to call as the association. If its different, you can pass in the association_method as an option.

scope_to :current_user, association_method: :blog_posts

will result in the following

current_user.blog_posts.build

To conditionally use this scope, you can use conditional procs

scope_to :current_user, if: proc{ admin_user_signed_in? }

or

scope_to :current_user, unless: proc{ current_user.admin? }

37
38
39
40
41
42
43
44
45
46
# File 'lib/active_admin/resource/scope_to.rb', line 37

def scope_to(*args, &block)
  options = args.extract_options!
  method = args.first

  scope_to_config[:method]              = block || method
  scope_to_config[:association_method]  = options[:association_method]
  scope_to_config[:if]                  = options[:if]
  scope_to_config[:unless]              = options[:unless]

end

#scope_to?(context = nil) ⇒ Boolean

Returns:

  • (Boolean)

65
66
67
68
69
70
# File 'lib/active_admin/resource/scope_to.rb', line 65

def scope_to?(context = nil)
  return false if scope_to_method.nil?
  return render_in_context(context, scope_to_config[:if]) unless scope_to_config[:if].nil?
  return !render_in_context(context, scope_to_config[:unless]) unless scope_to_config[:unless].nil?
  true
end

#scope_to_association_methodObject


48
49
50
# File 'lib/active_admin/resource/scope_to.rb', line 48

def scope_to_association_method
  scope_to_config[:association_method]
end

#scope_to_configObject


56
57
58
59
60
61
62
63
# File 'lib/active_admin/resource/scope_to.rb', line 56

def scope_to_config
  @scope_to_config ||= {
    method:             nil,
    association_method: nil,
    if:                 nil,
    unless:             nil
  }
end

#scope_to_methodObject


52
53
54
# File 'lib/active_admin/resource/scope_to.rb', line 52

def scope_to_method
  scope_to_config[:method]
end