我必须承认,我甚至不确定我是否正确地提出了这个问题......
在我的应用程序中,我有一堆命名范围来构建更高效的查找。 我无法工作的是:
=>我想找到当前类别及其后代中的所有产品。我使用'ancestry'gem来构建树,它在Class级别提供命名范围:
subtree_of(node) #Subtree of node, node can be either a record or an id
所以我认为有一个像这样的named_scope是个好主意:
named_scope :in_tree, :include => :category, :conditions => ['category in (?)', (subtree_of(@category)) ]
或
named_scope :in_tree, :include => :category, :conditions => ['category in (?)', (@category.subtree_ids) ]
这两件事都适用于控制器和助手,但不适用于模型......当我没有弄错时,归结为“@category”(我在控制器中定义了它)在模型中不可用。< / p>
是否有一种让它可用的方法?
感谢您的帮助!
缬氨酸
答案 0 :(得分:1)
它在您的模型中不起作用,因为@category
是一个存在于您的控制器中的实例变量。您可以使用lambda(匿名函数)将类别传递到命名范围:
named_scope :in_tree, lambda { |category| { :include => :category,
:conditions => ['category in (?)', (subtree_of(category)) ] }}
或
named_scope :in_tree, lambda { |category| { :include => :category,
:conditions => ['category in (?)', (category.subtree_ids) ] }}
现在,在您的控制器/助手中,您可以使用Product.in_tree(@category)
来使用命名范围。