Rails - ссылка на текущий объект в модели - PullRequest
1 голос
/ 06 августа 2010

Должен признать, я даже не уверен, правильно ли я поставил вопрос ...

В моем приложении у меня есть набор именованных областей для создания более эффективных поисков. То, что я не могу заставить работать, это:

=> Я хочу найти все товары в текущей категории и ее потомках. Я использую драгоценный камень 'ancestry' для построения дерева, и он предоставляет именованные области на уровне класса:

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" (я определил это в контроллере) не доступен в модели. 1014 *

Есть ли надежный способ сделать его доступным?

Спасибо за вашу помощь!

Val

1 Ответ

1 голос
/ 06 августа 2010

Это не работает в вашей модели, потому что @category - это переменная экземпляра, которая живет в ваших контроллерах. Вы можете передать категорию в именованную область, используя лямбду (анонимная функция):

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).

...