support loading resource :through method along with instance variable - closes #146
This commit is contained in:
@@ -69,7 +69,7 @@ module CanCan
|
||||
# Does not apply before filter to given actions.
|
||||
#
|
||||
# [:+through+]
|
||||
# Load this resource through another one. This should match the name of the parent instance variable.
|
||||
# Load this resource through another one. This should match the name of the parent instance variable or method.
|
||||
#
|
||||
# [:+shallow+]
|
||||
# Pass +true+ to allow this resource to be loaded directly when parent is +nil+. Defaults to +false+.
|
||||
|
||||
@@ -145,7 +145,15 @@ module CanCan
|
||||
|
||||
# The object to load this resource through.
|
||||
def parent_resource
|
||||
@options[:through] && [@options[:through]].flatten.map { |i| @controller.instance_variable_get("@#{i}") }.compact.first
|
||||
@options[:through] && [@options[:through]].flatten.map { |i| fetch_parent(i) }.compact.first
|
||||
end
|
||||
|
||||
def fetch_parent(name)
|
||||
if @controller.instance_variable_defined? "@#{name}"
|
||||
@controller.instance_variable_get("@#{name}")
|
||||
elsif @controller.respond_to? name
|
||||
@controller.send(name)
|
||||
end
|
||||
end
|
||||
|
||||
def name
|
||||
|
||||
Reference in New Issue
Block a user