Rails包含条件模块

Wed*_*dTM 1 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
Run Code Online (Sandbox Code Playgroud)

这是行不通的,我不知道为什么。有人可以告诉我如何根据满足上述条件的条件来包含模块吗?

谢谢!

编辑:

我在这里找到了解决问题的答案:Mongoid和载波

但是,我将问题授予最高答案,因为这可能是更有用的方法。

Ber*_*als 5

包括在班级发生的情况。您的高级属性处于实例级别。

有一些方法可以在每个实例级别进行包含,但是我不建议您这样做。

在这里,您最好使用继承

class Server; .. ; end
class PremiumServer < Server; ..; end
Run Code Online (Sandbox Code Playgroud)

或者,在您的情况下,如果唯一的方法是is_premium将其添加到Server类并使其返回premium变量

def is_premium
  self.premium
end
Run Code Online (Sandbox Code Playgroud)

哦,您应该在ruby中使用“问题”方法。尽管Mongoid为布尔值提供了这些。

def premium?
  self.premium
end
Run Code Online (Sandbox Code Playgroud)