Через что рекомендуемый путь состоит в том, чтобы расширить поведение класса, class_eval
и модули (не наследованием), если я хочу расширить класс, проложенный под землей в Драгоценном камне от направляющие 3 приложения?
Пример - это:
Я хочу добавить способность создать постоянные ссылки для тегов и категорий (через драгоценные камни ActsAsTaggableOn и ActsAsCategory).
Они определили Tag
и Category
модели.
Я хочу в основном сделать это:
Category.class_eval do
has_friendly_id :title
end
Tag.class_eval do
has_friendly_id :title
end
Даже если существуют другие способы добавить эту функциональность, которая могла бы быть характерна для драгоценного камня, что рекомендуемый путь состоит в том, чтобы добавить поведение к классам в направляющие 3 приложения как это?
У меня есть несколько других драгоценных камней, я создал это, я хочу сделать это к, такие как a Configuration
модель и Asset
модель. Я хотел бы смочь добавить, создают app/models/configuration.rb
образцовый класс к моему приложению, и это действовало бы, как будто я просто сделал class_eval
.
Так или иначе, как это, как предполагается, работает? Я не могу найти ничего, что покрывает это от любой из текущих направляющих 3 блога/документа/сути.
Я делаю это следующим образом, сначала добавляю файл в config/initializers, где вы можете потребовать файлы, содержащие ваши расширения:
# config/initializers/extensions.rb
require "#{Rails.root}/app/models/category.rb"
require "#{Rails.root}/app/models/tag.rb"
Затем вы можете просто снова открыть классы и добавить все, что вам нужно:
# app/models/category.rb
class Category
has_friendly_id :title
end
Единственный недостаток в том, что сервер должен быть перезапущен, чтобы изменения в этих файлах вступили в силу, не уверен, что есть лучший способ, чтобы преодолеть это.