2016-02-09 16 views
0

我有一堆控制器,它们扩展了ApplicationController,并且每个控制器都加载了一个不同的cancan资源。 UsersController@user,PostsController@post。我想知道,是否有可能在不知道实例变量名称的情况下从ApplicationController引用资源?像resource_instanceRails CanCan:引用来自application_controller的resource_instance

+0

什么是你想要的代码把你的ApplicationController?这与'cancan'无关。你见过[inherited_resources](https://github.com/josevalim/inherited_resources),它的“资源”更接近你想要的。 – Leito

+0

@Leito加载资源后,我根据资源设置了另一个实例变量(例如,许多资源都有一个company_id列,我根据resource.company设置了“@ company”)。我想在ApplicationController中这样做,所以我不必复制代码。在伪代码中,我想让ApplicationController方法说:“Cancan可以加载资源吗?如果是,请根据resource.company设置”@ company“ – Robert

回答

1

好吧,我得到了我的最终答案,它是没有。我探索了cancancan,cancan保持良好的灵性孩子和代码在那里,但不意味着被最终用户使用。

你可以得到你想要的东西,它是不漂亮:

self.class.cancan_resource_class.new(self).send(:resource_instance) 

尽管如此,请不要。 cancan_resource_class未记录为最终用户使用,并且:resource_instance受保护,因此为send。开发者可以选择改变这一点并打破你的应用程序。

如果所有有company,他们属于过,我建议你窝的路线,因此所有航线有:company_id,你可以用它来得到你想要的@company对象:companies/:company_id/users