Ruby Rails包含条件为的模块

Ruby Rails包含条件为的模块,ruby,module,mongoid,Ruby,Module,Mongoid,我试图只在满足条件时才包含一个模块 module PremiumServer def is_premium true end end class Server include Mongoid::Document include PremiumServer if self.premium field :premium, :type => Boolean, :default => false end 这不管用,我也不知道为什么。有人能告诉我如何根据满足的条

我试图只在满足条件时才包含一个模块

module PremiumServer
  def is_premium
    true
  end
end

class Server
  include Mongoid::Document
  include PremiumServer if self.premium
  field :premium, :type => Boolean, :default => false
end
这不管用,我也不知道为什么。有人能告诉我如何根据满足的条件包括模块,如上面所述吗

谢谢

编辑:

我在这里找到了问题的答案:


然而,我将这个问题授予最重要的答案,因为这可能是更有用的方式。

包括在课堂上发生的事情。您的高级属性处于实例级别

有一些方法可以在每个实例级别执行include,但我不推荐它们

在这里,您可以更好地使用继承

class Server; .. ; end
class PremiumServer < Server; ..; end
哦,你应该在ruby中使用“问题”方法。。。尽管Mongoid为布尔值提供了这些

def premium?
  self.premium
end

包括发生在类级别的事件。您的高级属性处于实例级别

有一些方法可以在每个实例级别执行include,但我不推荐它们

在这里,您可以更好地使用继承

class Server; .. ; end
class PremiumServer < Server; ..; end
哦,你应该在ruby中使用“问题”方法。。。尽管Mongoid为布尔值提供了这些

def premium?
  self.premium
end

使用类继承和Mongoid的作用域机制:

class Server
  include Mongoid::Document
  field :premium, type: Boolean, default: false
  # ... basic server methods
end

class PremiumServer < Server
  default_scope :premium_servers, where(premium: true)
  # ... additional premium server methods
end

p_server = PremiumServer.first
p_server.<access to PremiumServer methods>
类服务器
include Mongoid::Document
字段:高级,类型:布尔,默认值:false
# ... 基本服务器方法
终止
类PremiumServer<服务器
默认\u作用域:高级\u服务器,其中(高级:true)
# ... 额外的高级服务器方法
终止
p_server=PremiumServer.first
p_服务器
  • 继承:

  • 使用类继承和Mongoid的作用域机制:

    class Server
      include Mongoid::Document
      field :premium, type: Boolean, default: false
      # ... basic server methods
    end
    
    class PremiumServer < Server
      default_scope :premium_servers, where(premium: true)
      # ... additional premium server methods
    end
    
    p_server = PremiumServer.first
    p_server.<access to PremiumServer methods>
    
    类服务器
    include Mongoid::Document
    字段:高级,类型:布尔,默认值:false
    # ... 基本服务器方法
    终止
    类PremiumServer<服务器
    默认\u作用域:高级\u服务器,其中(高级:true)
    # ... 额外的高级服务器方法
    终止
    p_server=PremiumServer.first
    p_服务器
    
  • 继承:

  • premium是实例方法还是字段?如果是这样,那么这将不起作用,因为在加载时,包含发生在类级别。premium是实例方法还是字段?如果是这样的话,这将不起作用,因为在加载时,include发生在类级别。