【问题标题】:Rails: Override and also use existing gem module methodRails:覆盖并使用现有的 gem 模块方法
【发布时间】:2015-06-26 12:15:41
【问题描述】:

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

宝石模块

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 模块方法并在其中添加更多东西?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案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
    

    【讨论】:

    • 我不想复制/粘贴或重写基本的 menu(session) 函数。和在类中使用 super 方法一样,这里有没有更好的重用 gem 方法的方法?
    猜你喜欢
    • 2010-10-09
    • 2013-07-10
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多