adding :through_association option to load_resource (thanks hunterae) - closes #171

This commit is contained in:
Ryan Bates 2010-11-12 10:42:26 -08:00
parent ebf77ed647
commit 92995d791e
3 changed files with 15 additions and 1 deletions

View File

@ -71,6 +71,10 @@ module CanCan
# [:+through+]
# 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+]
# Pass +true+ to allow this resource to be loaded directly when parent is +nil+. Defaults to +false+.
#

View File

@ -136,7 +136,7 @@ module CanCan
def resource_base
if @options[:through]
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]
resource_class
else

View File

@ -174,6 +174,16 @@ describe CanCan::ControllerResource do
@controller.instance_variable_get(:@project).should == :some_project
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
@params.merge!(:action => "show", :id => 123)
category = Object.new