2015-10-23 6 views
2

У меня есть поведение для моделей.Рельсы, модуль для записи. Где хранить настройки?

Я хотел бы включать, как это:

class Building < ActiveRecord::Base 
    has_many :blocks 
    include Staticizable 
    check_children :blocks #here name of children model to check 
    ... 
end 

поведение выглядит следующим образом:

module Staticizable 
    extend ActiveSupport::Concern 
    module ClassMethods 
     def check_children child 
      self.child_model = child #where is to store model name to check? 
     end 
    end 

    def was_staticized 
     (DateTime.now - self.staticized_date.to_datetime).to_i 
    end 

    def staticized? 
     if @child_model.present? 
      ap self.send(@child_model) 
     else 
      if staticize_period > was_staticized 
       true 
      else 
       false 
      end 
     end 
    end 

    def staticized 
     self.staticized_date = DateTime.now 
     save 
    end 
end 

Так что мне нужно знать, где я могу хранить название модели для проверки детей. И как правильно это сделать?

ответ

0

Наконец, я получил ответ, не уверен, что это лучший способ, если нет, дайте мне знать, пожалуйста:

module Staticizable 
    extend ActiveSupport::Concern 

    included do 
     class << self; 
      attr_accessor :has_child_custom 
     end 
    end 

    module ClassMethods 
     def check_children child 
      self.has_child_custom = child 
     end 
    end 

    def was_staticized 
     unless staticized_date 
      return false 
     end 
     (DateTime.now - self.staticized_date.to_datetime).to_i 
    end 

    def staticized? 
     if self.class.has_child_custom.present? 
      self.send(self.class.has_child_custom).each do |child| 
       unless child.staticized? 
        return false 
       end 
      end 
     else 
      if self.staticize_period > was_staticized 
       true 
      else 
       false 
      end 
     end 

    end 

    def staticized 
     self.staticized_date = DateTime.now 
     save 
    end 

end 

Также я создал файл в/Config/инициализаторах с

ActiveRecord::Base.send :include, Staticizable 

И установить его в модели с:

class Building < ActiveRecord::Base 
    check_children :blocks 
    ... 
end