我正在使用ruby on rails,我基本上是试图将两个模块包含在相同的模型/类中,并且两个模块具有相同的方法名称。下面将演示一个示例,但是我的问题是:
是否可以有条件地包含模块?要么 有没有一种基于类的特定实例进行调用的方法。
一个示例是一个简单的完整配置文件向导。
其工作原理
案例1:如果让用户说一个运输者,则当用户具有company_name时,step_one完成。
情况2:另一方面,如果用户是客户端,则当用户有电话时,step_one完成。
class User < ApplicationRecord
include ClientWizard
include TransporterWizard
end
module ClientWizard
def step_one_completed?
self.name.present?
end
end
module TransporterWizard
def step_one_completed?
self.company_name.present?
end
end
答案 0 :(得分:4)
不,模块方法都存在于类的名称空间中。因此,这似乎不是模块的特别好用例。
您可以为方法指定模块的特定名称(client_wizard_step_one_completed?
,但我建议改为将向导定义为单独的类,并将用户实例作为参数传递。
class User < ApplicationRecord
def client_wizard
ClientWizard.new(self)
end
end
class ClientWizard
def initialize(user)
@user = user
end
def step_one_completed?
@user.name.present?
end
end