Как правильно инициализировать атрибут класса в Rails?
Как правильно инициализировать class_attribute
в Rails?
Я использую этот:
class Foo < ActiveRecord::Base
class_attribute :foobar
self.foobar = []
# ...
end
который, кажется, работает нормально, но также, кажется, выглядит немного не-Railsy для меня.
3 ответов
здесь все описано:http://apidock.com/rails/Class/class_attribute
Если вы нажмете "показать источник", вы увидите, что нет доступных параметров для установки значения по умолчанию. Ты все делаешь правильно.
то, что вы сделали, работает хорошо (если вы не наследуете).
Если вы наследуете от этого класса, вы можете использовать inherited
метод, чтобы избежать "утечки".
def self.inherited(sub_class)
self.foobar = self.foobar.clone
# or `self.foobar = []`
end
A default
опция была добавлена на ветке master of Rails в этом году, проверьте:https://github.com/rails/rails/pull/29270. С помощью этого изменения вы можете сделать:
class Foo < ActiveRecord::Base
class_attribute :foobar, default: []
end