инициализация переменных в классах ActiveRecord - PullRequest
1 голос
/ 03 июня 2010

Как инициализировать переменные в классе ActiveRecord? Переменные здесь - это переменные, которые выходят за рамки базы данных

, таких как:

class Product
  attr_accessor :used
end

Я хочу изначально присвоить @used изначально false, позже, если кто-то получит доступ к продукту, я изменю @used на true

Сначала я подумал о том, чтобы поместить @used=false в метод инициализации, но он не вызывается.

Ответы [ 2 ]

3 голосов
/ 03 июня 2010
attr_accessor_with_default :used, false

Или, если вы хотите использовать метод инициализации, вы можете определить обратный вызов after_initialize

def after_initialize
  @used = false
end

Использование attr_accessor_with_default с литералом объекта (например, attr_accessor_with_default :used, false) небезопасно для использования с любыми изменяемыми объектами. В частности, это означает, что различные экземпляры вашего класса будут иметь один и тот же объект в качестве значения по умолчанию. Это похоже на попытку использовать переменную класса (@@my_var), где вы хотите переменную экземпляра (@my_var). Если вы хотите использовать изменяемый объект (например, String, Array или Hash), вы должны использовать синтаксис блока:

attr_accessor_with_default(:used) { Array.new }
1 голос
/ 03 июня 2010

Определите метод с именем: after_initialize

class User < ActiveRecord::Base
  def after_initialize
    @used = false
  end
end

Он будет вызван (хм) после метода инициализации

Надеюсь, это поможет

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