0

我正在尝试重用 DataMapper 类中的方法。我认为这可能也是一个红宝石问题。

class Foo
  include DataMapper::Resource

  property :name
  property ...

  def self.special_name
    self.all(:name => 'whatever')
  end
end

class Bar
  include DataMapper::Resource

  property :name
  property ...

  def self.special_name
    self.all(:name => 'whatever')
  end
end

所以方法 special_name 将用于两个类,因为我想得到相同的结果。但它也使用了 DataMapper 方法,如“all”。那么你会怎么做呢?

谢谢

4

3 回答 3

0


module SpecialName

property :name def self.special_name self.all(:name => 'whatever') end end

class Foo include DataMapper::Resource include SpecialName end

class Bar include DataMapper::Resource include SpecialName end

于 2010-03-10T18:15:38.033 回答
0
module SpecialName
  def self.included(base)
    base.property :name, String
    base.extend ClassMethods
  end

  module ClassMethods
    def special_name
      all(:name => 'whatever')
    end
  end
end

class Foo
  include DataMapper::Resource
  include SpecialName
end

有关此包含/扩展习语的更多信息,请参阅http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/

于 2010-03-10T19:28:02.550 回答
0

“答案”是错误的。有关更多信息,请参阅此问题的答案:如何使用自定义方法扩展 DataMapper::Resource

短版:您需要使用 DataMapper 的内置扩展器,因为记录/行和模型/表具有不同的类。

DataMapper::Model.append_extensions(MyModule::ClassMethods) #Add to model
DataMapper::Model.append_inclusions(MyModule::InstanceMethods) #Add to record
于 2011-04-16T09:22:56.390 回答