2009-10-17 48 views
0

說我有以下控制器,並且想限制:edit,:update和:destroy到current_user自己的foos。如何處理Rails控制器中不同動作的不同場景干與inherited_resources

class FooController < InheritedResources::Base 
    before_filter :login_required 
    respond_to :html 

    def show 
    @foo = Foo.find params[:id] 
    show! 
    end 

    protected 

    def collection 
    @foos ||= Foo.all 
    end 

    def begin_of_association_chain 
    current_user 
    end 
end 

我的一個簡單的問題或許是天真的問題是:上述問題能否被重構得更好看?這感覺就像我重寫了太多的inherited_resources。

回答

0

我通常使用前面的過濾器:lookup_foo。 (調用它:except => [:index,:new,:create])。然後我會有一行像@foo = current_user.foos.find(params [:id])。

一個類似的方法可以用於索引操作,並且兩者都可以調整以使管理員可以訪問更多。

1

如果你想通過我只想用一個的before_filter當前用戶建立的便利性(見下文)。但是,對於編輯和銷燬操作,我會實施授權庫,如cancan

class FooController < InheritedResources::Base 
    before_filter :login_required  
    before_filter :assign_user, :only => [:create] 
    respond_to :html 

    private 
    def assign_user 
    build_resource.user = current_user 
    end 
end 

通過:http://groups.google.com/group/inherited_resources/browse_thread/thread/9a2a796a9a1217d4

相關問題