2013-02-17 34 views
2

使用User所属的应用程序处理012_。一个Organization has_and_belongs_to_many产品,但organizations_products表。使用关联编写Rails cancan功能,该功能与accessible_by

我想要一个User具有特定的角色,以便能够管理产品的Organization。在ability.rb

def initialize(user) 
    # ...snip unrelated stuff 
    elsif user.is_manager? 
    can :manage, Product, do |product| 
     user.organization.products.include?(product) 
    end 

这说明什么,我想这样做,但它提出了在产品控制异常:

def index 
    @products = Product.accessible_by(current_ability) 
end 

因为acessible_bycan't be used with blocks的能力定义。我如何以与accessible_by兼容的方式编写此功能?

回答

0
can :manage, Product, user.organization.products do |product| 
    user.organization.products.include?(product) 
end 

澄清:CanCan在版本1.6中添加了第三个参数,您可以将其理解为accessible_by使用的范围。用于评估can :manage, @a_specific_product的模块,如果您使用这两个模块之一(范围或模块),则应该使用两者。

另请参阅:this question,主要是这个的一个重复,和the docs