0

私は以下を持っています(RoR 3.1およびMySQL 5.1上):

  class Menu < ActiveRecord::Base
    has_many :menu_headers
    has_many :menu_items, :through => :menu_headers
    belongs_to :location      
  end

  class MenuHeader < ActiveRecord::Base
      acts_as_tree :parent_id
      has_many :menu_items
      belongs_to :menu
  end

  class MenuItem < ActiveRecord::Base
    scope :is_enabled, where(:is_enabled => true)
    belongs_to :menu_header
  end

関係全体でスコープを呼び出せるようにしたいと思います。このようなもの:

  # call the scope :is_enabled here
  Menu.find(12).(where menu_items.is_enabled)

しかし、これを行う方法がわかりません。

次の動作が必要です。

  Menu.find(12)

is_enabled=false の場合に menu_items をプルし続ける

これを行う方法についてのアイデアはありますか?

どうも

編集#1 は、act_as_treeと場所の関連付けも機能する必要があるため、これらを追加しました。

join on :has_many :through アソシエーションを使用したこのスコープのようなものは機能するかもしれませんが、少し醜いようです

4

1 に答える 1

1

これでうまくいくはずです:

Menu.find(12).menu_items.is_enabled

ID 12 のメニューに関連付けられているすべての有効なメニュー項目が返されます。

于 2012-08-20T13:36:40.353 に答える