Методы повторного использования Ruby в классах DataMapper (помощник) - PullRequest
0 голосов
/ 10 марта 2010

Я пытаюсь повторно использовать методы в классах 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, такие как «все». Так как бы вы это сделали?

Thx

Ответы [ 3 ]

0 голосов
/ 10 марта 2010
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

Для получения дополнительной информации об этой идиоме include / extension см. http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/.

0 голосов
/ 16 апреля 2011

«Ответ» неправильный. См. Ответ на этот вопрос для получения дополнительной информации: Как расширить DataMapper :: Resource с помощью пользовательского метода

Короткая версия: вам необходимо использовать встроенные расширители DataMapper, потому что запись / строка и модель / таблица имеют разные классы.

DataMapper::Model.append_extensions(MyModule::ClassMethods) #Add to model
DataMapper::Model.append_inclusions(MyModule::InstanceMethods) #Add to record
0 голосов
/ 10 марта 2010

<code>
module SpecialName</p>

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

<p>class Foo
  include DataMapper::Resource
  include SpecialName
end</p>

<p>class Bar
  include DataMapper::Resource
  include SpecialName
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...