adding :through_association option to load_resource (thanks hunterae) - closes #171
This commit is contained in:
parent
ebf77ed647
commit
92995d791e
|
@ -71,6 +71,10 @@ module CanCan
|
||||||
# [:+through+]
|
# [:+through+]
|
||||||
# Load this resource through another one. This should match the name of the parent instance variable or method.
|
# Load this resource through another one. This should match the name of the parent instance variable or method.
|
||||||
#
|
#
|
||||||
|
# [:+through_association+]
|
||||||
|
# The name of the association to fetch the child records through the parent resource. This is normally not needed
|
||||||
|
# because it defaults to the pluralized resource name.
|
||||||
|
#
|
||||||
# [:+shallow+]
|
# [:+shallow+]
|
||||||
# Pass +true+ to allow this resource to be loaded directly when parent is +nil+. Defaults to +false+.
|
# Pass +true+ to allow this resource to be loaded directly when parent is +nil+. Defaults to +false+.
|
||||||
#
|
#
|
||||||
|
|
|
@ -136,7 +136,7 @@ module CanCan
|
||||||
def resource_base
|
def resource_base
|
||||||
if @options[:through]
|
if @options[:through]
|
||||||
if parent_resource
|
if parent_resource
|
||||||
@options[:singleton] ? parent_resource : parent_resource.send(name.to_s.pluralize)
|
@options[:singleton] ? parent_resource : parent_resource.send(@options[:through_association] || name.to_s.pluralize)
|
||||||
elsif @options[:shallow]
|
elsif @options[:shallow]
|
||||||
resource_class
|
resource_class
|
||||||
else
|
else
|
||||||
|
|
|
@ -174,6 +174,16 @@ describe CanCan::ControllerResource do
|
||||||
@controller.instance_variable_get(:@project).should == :some_project
|
@controller.instance_variable_get(:@project).should == :some_project
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should load resource through the custom association name" do
|
||||||
|
@params.merge!(:action => "show", :id => 123)
|
||||||
|
category = Object.new
|
||||||
|
@controller.instance_variable_set(:@category, category)
|
||||||
|
stub(category).custom_projects.stub!.find(123) { :some_project }
|
||||||
|
resource = CanCan::ControllerResource.new(@controller, :through => :category, :through_association => :custom_projects)
|
||||||
|
resource.load_resource
|
||||||
|
@controller.instance_variable_get(:@project).should == :some_project
|
||||||
|
end
|
||||||
|
|
||||||
it "should load resource through the association of another parent resource using method" do
|
it "should load resource through the association of another parent resource using method" do
|
||||||
@params.merge!(:action => "show", :id => 123)
|
@params.merge!(:action => "show", :id => 123)
|
||||||
category = Object.new
|
category = Object.new
|
||||||
|
|
Loading…
Reference in New Issue
Block a user