1

認めざるを得ませんが、質問が正しいかどうかさえわかりません...

私のアプリには、より効率的な検索を構築するための名前付きスコープがたくさんあります。私が仕事に就けないのはこれです:

=> 現在のカテゴリとその子孫のすべての製品を検索したい。「ancestry」gem を使用してツリーを構築すると、クラス レベルで名前付きスコープが提供されます。

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」(コントローラーで定義しています) はモデルでは使用できません。

それを利用可能にするための簡単な方法はありますか?

ご協力いただきありがとうございます!

ヴァル

4

1 に答える 1

1

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

于 2010-08-06T13:02:19.897 に答える