Как правильно инициализировать атрибут класса в 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