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发生在类级别。