Как добавить вспомогательные методы атрибута ActiveRecord к виртуальным атрибутам? - PullRequest
2 голосов
/ 06 марта 2012

ActiveRecord предлагает вспомогательные методы атрибута, такие как _? и «грязные» методы (_changed? и т.атрибуты?

Я надеюсь что-то вроде:

class MyClass < ActiveRecord::Base

  some_macro :my_attribute

end


$ @my_class = MyClass.new
$ @my_class.my_attribute? # => false
$ @my_class.my_attribute_changed? # => false

1 Ответ

1 голос
/ 06 марта 2012

Ну, это, безусловно, было интересно исследовать. Видимо, нет прямого способа сделать это ... вот две вещи, которые я нашел

С 2009 г.

С 2011 года - усиливает пост 2009 года , но делает его немного чище. Вы создаете модуль, который обновляет хэш атрибута. Из поста Брэндона Вайса:

# app/models/dirty_associations.rb
module DirtyAssociations
  attr_accessor :dirty

  def make_dirty(record)
    self.dirty = true
  end

  def changed?
    dirty || super
  end
end

# app/models/lolrus.rb
class Lolrus
  include DirtyAssociations

  has_and_belongs_to_many :buckets,
                          :after_add    => :make_dirty,
                          :after_remove => :make_dirty
end

Существует также этот плагин , упомянутый здесь , но я не уверен, насколько он полезен для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...