СУХОЙ способ вызова метода в каждой модели рельсов - PullRequest
2 голосов
/ 11 мая 2010

В том же ключе, что и этот вопрос , я хочу вызвать acts_as_reportable внутри каждой модели, чтобы я мог делать одноразовые ручные отчеты в консоли в моей среде разработчика (с дампом рабочей среды). данные).

Какой лучший способ сделать это? Ввод acts_as_reportable if ENV['RAILS_ENV'] == "development" в каждую модель становится утомительным и совсем не СУХИМ. Все говорят, что исправление обезьян - это дьявол, но миксин кажется излишним.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 11 мая 2010

Для меня лучшим способом будет добавить его в ActiveRecord :: Base в инициализаторе. Я считаю, что act_as_reportable это миксин под капотом. Делая это, вы сможете вызывать все методы, которые были включены с act_as_reportable, только во всех ваших моделях в среде разработки.

Я сделаю это в каталоге config/initializers, в файле с именем model_mixin.rb или в любом другом месте.

class ActiveRecord::Base
  acts_as_reportable if (ENV['RAILS_ENV'] == "development")
end

Аргумент о том, что использование monkey patch является грязным, зависит от вас самих, и насколько, на мой взгляд, читаемый код использует то, что вам удобно. Эта функция должна использоваться, и она всегда зависит от пользователя.

1 голос
/ 11 мая 2010

Я использую миксин для общих методов во всех моих моделях:

 module ModelMixins
    # Splits a comma separated list of categories and associates them
    def process_new_categories(new_categories)
      unless new_categories.nil?
        for title in new_categories.split(",")
          self.categories << Category.find_or_create_by_title(title.strip.capitalize)
        end
        self.update_counter_caches
      end
   end
 end

Я подумал о том, чтобы сделать это другими способами, но мне кажется, это самый законный способ высушить ваши модели. Модельный эквивалент ApplicationController был бы изящным решением, хотя я не уверен, как вы поступите, или есть достойный аргумент против такого.

1 голос
/ 11 мая 2010

А как насчет создания класса Reportable и извлечения из него всех моделей?

class Reportable
  acts_as_reportable if ENV['RAILS_ENV'] == "development"
end

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