Как мне написать методы уровня класса в моделях rails, чтобы они не выполнялись во время задач rake? - PullRequest
1 голос
/ 21 февраля 2011

У меня есть модель role в приложении rails, в которой я написал несколько быстрых методов класса ярлыков. Эти методы, по сути, являются просто удобными обертками для некоторых обычно используемых искателей. Но это представляет серьезную проблему. Если я попытаюсь загрузить схему для этого приложения на другом компьютере с чистой базой данных, то произойдет сбой. Это связано с тем, что задача db: schema: load rake сначала загружает всю среду rails, таким образом загружая мои методы класса, которые ищут запись в базе данных, которая, конечно же, еще не существует.

Итак, две проблемы:

  1. Я не знаю, что понимаю, почему он запускает метод при загрузке.
  2. Я не знаю, как обойти это, если я не спасу ошибки для каждого метода.

Есть ли способ, которым я скучаю по "рельсам" или "рубину"?

Вот мой пример кода:

Class Role < ActiveRecord::Base

  def self.admin
    find_by_name "Administrator"
  end

  def self.user
    find_by_name "User"
  end

  def self.moderator
    find_by_name "Moderator"
  end


end

И тот же код в гисте: https://gist.github.com/836501

Спасибо за любую помощь.

UPDATE:

Оказалось, что я забыл разместить вызовы этих методов класса с моих фабрик в стороне от блока.

Так вот:

Factory.define :admin, :parent => :user do |f|
  f.roles [Role.admin]
end

Нужно быть таким:

Factory.define :admin, :parent => :user do |f|
  f.roles {[Role.admin]}
end

1 Ответ

1 голос
/ 21 февраля 2011

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

Если вы вызываете Role.admin, Role.user и т. Д. В коде инициализации или коде модели в другом месте, он выполнит эти области.

Я бы порекомендовал поискать в вашей кодовой базе ссылки на них.

Кроме того, если вы публикуете трассировку стека ошибки (когда БД еще не заполнена), это может дать подсказку, кто их вызывает.

...