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

关于如何做到这一点的任何想法?

谢谢

编辑#1 添加了 act_as_tree 和 location 关联,因为这些也需要正常工作。

像这样的 Scope with join on :has_many :through 关联可能会起作用,但看起来有点难看

4

1 回答 1

1

这应该可以解决问题:

Menu.find(12).menu_items.is_enabled

它将返回与 ID 为 12 的菜单关联的所有启用的菜单项。

于 2012-08-20T13:36:40.353 回答