我有一个充当嵌套集(树)的模型,如下所示:
class Position < ActiveRecord::Base
attr_accessible :parent_id
acts_as_nested_set
belongs_to :person
belongs_to :parent, :class_name => 'Position', :foreign_key => :parent_id
has_many :children, :class_name => 'Position', :foreign_key => :parent_id
end
我的ability.rb文件包含:
can :read, Position, :id => #a list of position ids
ID列表将根据对此情况不重要的其他设置而改变。
我的问题是,如何让@ position.children只返回能力授权的职位?
答案 0 :(得分:0)
听起来你想要一个lambda中has_many
的条件,所以它在运行时进行评估......类似于:
has_many :children, :class_name => 'Position', :foreign_key => :parent_id, :conditions => lambda {|child| can? :read child }
我没有测试过这个(很明显),但是这会让你更接近。
要在模型中获得can?
,请参阅:Access CanCan's `can?` method from a model