Rails - 参考模型中的当前对象

时间:2010-08-06 12:50:18

标签: ruby-on-rails class model named-scope

我必须承认,我甚至不确定我是否正确地提出了这个问题......

在我的应用程序中,我有一堆命名范围来构建更高效的查找。 我无法工作的是:

=>我想找到当前类别及其后代中的所有产品。我使用'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>

是否有一种让它可用的方法?

感谢您的帮助!

缬氨酸

1 个答案:

答案 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)来使用命名范围。