同一类中包含两个具有相同方法名称的模块

时间:2018-07-13 14:22:21

标签: ruby-on-rails ruby module

我正在使用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

1 个答案:

答案 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