Rails:覆盖并使用现有的gem模块方法

时间:2015-06-26 12:15:41

标签: ruby-on-rails ruby

我有一个带辅助模块的宝石。 例如

宝石模块

module Hotel
 module MenuItem
  def menu(session)
    x = DEFAULT_FOOD_MENU[session]
  end

  def print_menu(menu)
    #printing menu
  end
end

自定义类

module SizzSuzzHotel
 module MenuItem
   include Hotel::MenuItem
  def menu(session)
    # I want to use the default menu item and also specific menu related to this hotel! . 
  end
end

module SizzSuzzHotel
 class order
  include MenuItem
    def order(session)
       menu_item = menu(session)  
       print(menu_item)
    end


  end
end

这里我要覆盖菜单,我想使用现有的print_menu! 我怎样才能做到这一点?使用gem模块方法还可以添加更多东西吗?

1 个答案:

答案 0 :(得分:1)

如果您包含MenuItem模块,则两种方法都可用,因此您可以轻松地重新定义其中一种方法。

include MenuItem

def menu(session)
  ... here you write you custom menu method behaviour
end

def order(session)
  menu_item = menu(session) # => above menu method will be called
  print(menu_item) # => print method from MenuItem module will be called
end