0

私は3つのモデルを持っています:

Class Model1

end

Class Model2

end

Class Model3

end

私はこのコードを持っています:

scope :created_between, lambda { |start_time, end_time| where(:created_at => (start_time...end_time)) }

class << self
 ## Class methods for calculating searches
 def created_today
  today = Time.zone.now
  created_between(today.beginning_of_day, today.end_of_day)
 end

 def created_yesterday
  yesterday = Time.zone.now - 1.day
  created_between(yesterday.beginning_of_day, yesterday.end_of_day)
 end

 def created_last_week
  start_time = (Time.zone.now - 1.week).beginning_of_day
  end_time = Time.zone.now
  created_between(start_time, end_time)
 end

 def created_last_month
  start_time = (Time.zone.now - 1.month).beginning_of_day
  end_time = Time.zone.now
  created_between(start_time, end_time)
 end

 def created_last_year
  start_time = (Time.zone.now - 1.year).beginning_of_day
  end_time = Time.zone.now
  created_between(start_time, end_time)
 end

終わり

このコードを3つのモデルに追加する必要がありますが、各モデル内でコードを繰り返したくありません。

どうすればいいですか?

どうもありがとうございます!

4

3 に答える 3

6

これを試して:

module CommonClassFunctions

 def self.included(base)
   base.send :extend, ClassMethods
 end

 module ClassMethods
   ## Class methods for calculating searches
   def created_today
    today = Time.zone.now
    created_between(today.beginning_of_day, today.end_of_day)
   end

   def created_yesterday
    yesterday = Time.zone.now - 1.day
    created_between(yesterday.beginning_of_day, yesterday.end_of_day)
   end

   def created_last_week
    start_time = (Time.zone.now - 1.week).beginning_of_day
    end_time = Time.zone.now
    created_between(start_time, end_time)
   end

   def created_last_month
    start_time = (Time.zone.now - 1.month).beginning_of_day
    end_time = Time.zone.now
    created_between(start_time, end_time)
   end

   def created_last_year
    start_time = (Time.zone.now - 1.year).beginning_of_day
    end_time = Time.zone.now
    created_between(start_time, end_time)
   end
  end
end

Class Model1
  include CommonClassFunctions
end

Class Model2
  include CommonClassFunctions
end

Class Model3
  include CommonClassFunctions
end
于 2012-11-08T15:04:01.763 に答える
3

このメソッドを使用してモジュールを定義し、それを3つのモデルに含めることができます。

好き :

module Searcheable
  def created_today
    .
    . 
    .
    .
    .
  end
end

次に、クラスで:

class Model1
  extend Searcheable
end

class Model2
  extend Searcheable
end

class Model3
  extend Searcheable
end
于 2012-11-08T15:00:51.523 に答える
0

あなたは継承でこれを行うことができます

class Model
  class << self
    def created_today
      puts "created today from Model"
    end
  end
end

class Model1 < Model

end

class Model2 < Model

end

class Model3 < Model

end

Model1.created_today
# output: created today from Model
于 2012-11-08T15:03:32.467 に答える