2016-02-09 17 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