Permalink
Browse files

adding :through_association option to load_resource (thanks hunterae) -

closes #171
  • Loading branch information...
1 parent ebf77ed commit 92995d791e7e5ead2c38e9a35e8d8470471b0868 @ryanb committed Nov 12, 2010
@@ -71,6 +71,10 @@ def load_and_authorize_resource(*args)
# [:+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+.
#
@@ -136,7 +136,7 @@ def collection_instance
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
@@ -174,6 +174,16 @@
@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

0 comments on commit 92995d7

Please sign in to comment.