Ruby on Rails: обновление до драгоценного камня, забивающего ранее существующий атрибут моей модели, опции? - PullRequest
1 голос
/ 28 сентября 2011

Драгоценный камень, который я использовал, добавляет методы к моделям. Недавно он обновил имена своих методов так, что одно из имен методов теперь совпадает с одним из ранее существующих атрибутов базы данных моей модели.

Существуют ли какие-либо обходные пути для этой проблемы, кроме переименования столбца в моей базе данных и обновления всего моего кода, если я хочу быть в курсе последних событий с гемом?

В случае, если полезно сделать это более конкретно, драгоценным камнем является PaperTrail, который добавляет отслеживание версий в модели. У моей модели был ранее существующий атрибут в базе данных, называемый version_name, который последняя версия PaperTrail просто добавила как class_attribute version_name, который используется PaperTrail для определения имени другого метода.

1 Ответ

1 голос
/ 29 сентября 2011

Не очень знаком с PaperTrail (хотя я собирался изучить его).Предполагая, что PaperTrail не имеет опции конфигурации для изменения имени * version_name *, вы, вероятно, можете обойти это так в своей модели:

class Thingy
  def version_name_attr
    attributes['version_name']
  end

  def version_name_attr=(val)
    attributes['version_name'] = val
  end
end

Просто используйте * version_name_attr * всякий раз, когда вы хотите получить доступ к вашемуатрибута и * verson_name *, если вам нужен метод PaperTrail.

Что-то вроде этого немного чище , но может привести к поломке, если PaperTrail использует * version_name * для внутреннего использования.

class Thingy
  alias_method :paper_trail_version_name, :version_name
  def version_name
    attributes['version_name']
  end
end

В этом случае используйте * paper_trail_version_name *, когда вы хотите метод PaperTrail.Доступ к вашему атрибуту останется таким, как вы ожидаете.

...