Может ли конструктор модели быть пустым в Rails? - PullRequest
0 голосов
/ 31 января 2010

У меня есть модель «Стоимость» в рельсах. Примерно так:

class Cost < ActiveRecord::Base

    belongs_to :cost_type
    has_many :cost_distributions

    attr_accessor :epp

    def initialize()
    end

Однако в моих тестах, когда я пытаюсь создать новый экземпляр с пустым конструктором

    cost = Cost.new

Я получаю сообщение об ошибке: неверное количество аргументов (0 для 1). Почему игнорируется мой пустой конструктор?

Ответы [ 3 ]

2 голосов
/ 31 января 2010

Вам необходимо разрешить ActiveRecord выполнять свою собственную инициализацию, поскольку вы по существу переопределяете поведение. Просто измените initialize на это:

def initialize()
 super
end

Однако, если вы вообще не предоставляете конструктор, Rails позволяет вам создать модель без параметров:

Cost.new

Так ваш пустой initialize метод делает что-то еще? Если нет, то это даже не нужно.

1 голос
/ 01 февраля 2010
def initialize(*args)
  super
end

Это секретный соус.

0 голосов
/ 01 февраля 2010

Как правило, переопределение метода initialize ActiveRecord не очень хорошая идея .

Если ваш initialize() ничего не делает, он вам не нужен. Просто удали его.

class Cost < ActiveRecord::Base

    belongs_to :cost_type
    has_many :cost_distributions

    attr_accessor :epp

end

Вы все равно сможете вызывать Cost.new (правильный метод инициализации будет предоставлен самим ActiveRecord, если вы его не переопределите).

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