Ruby on rails RoR,从模块调用列名

Ruby on rails RoR,从模块调用列名,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在使用Ruby on Rails。我有一个名为PatientFactory的模块,它将包含在患者模型中 我需要从该模块访问患者id module PatientFactory def self.included(base) # need to access instance variable here ... end end 但更重要的是,我需要它在自我。包括(基础) 我可以很容易地在这个方法之外访问它,但是如何在内部访问它呢?class Patient

我正在使用Ruby on Rails。我有一个名为PatientFactory的模块,它将包含在患者模型中

我需要从该模块访问患者id

module PatientFactory

  def self.included(base)

    # need to access instance variable here
    ...

  end
end
但更重要的是,我需要它在自我。包括(基础) 我可以很容易地在这个方法之外访问它,但是如何在内部访问它呢?

class Patientclass Patient < ActiveRecord::Base
  include PatientFactory
end
包括PatientFactory 结束 然后,您可以访问该实例,就好像它们是患者方法的一部分一样

如果您仍然需要保留您提到的工作流,Yehuda可能会提供一些帮助


如果您想这样做:

class Patient < ActiveRecord::Base
  include PatientFactory
end

当您的模块包含在一个类中时,它的所有方法都将成为该类的实例方法。如果您愿意扩展它们,它们将被插入到类的单例类中,因此可以像类方法一样访问它们。

对不起,我需要在def self.include(base)方法中使用它,如果调用self.id,它将不起作用,因为它访问类而不是实例。需要某种钩子。为什么?你想做什么?好吧,在包含的(基础)中。有一个工作流,只有这样工作。对不起,这不是我需要的。它需要采用那种方法。没有self.id不起作用你知道,self.include在类中被调用。基础是类。您对其中的任何实例都没有访问权限。你能更透彻地解释一下你实现了什么吗?是的,这就是为什么解决方案不是那么简单。“我使用Ruby on Rails。我有一个名为PatientFactory的模块,它将包含在患者模型中。”如果你将它包含在模型中,并且作为一个类的模型,你想如何从不存在的实例访问id?你能描述一下你想要实现什么,让人们能理解吗?
module PatientFactory
  def get_patient_id
    self.id 
  end
end

a = Patient.new
a.id #=> nil
a.save
a.id #=> Integer