Ruby on Railsアプリケーションにこのクラスがあります
class ChartData
def self.user_logs_by_day(logs)
days_with_hours = Hash.new{|h, k| h[k] = Hash.new(&h.default_proc)}
logs.each do |log|
days_with_hours[log.user.name][log.log_date] = log.total_hours
end
days_with_hours
end
def self.project_logs_by_day(logs)
days_with_hours = Hash.new{|h, k| h[k] = Hash.new(&h.default_proc)}
logs.each do |log|
if !log.project.nil?
days_with_hours[log.project.name][log.log_date] = log.total_hours
else
days_with_hours[@default][log.log_date] = log.total_hours
end
end
days_with_hours
end
end
この方法を多くのモデルで使いたいので、このように 2 つの方法を 1 つにまとめたいと思います。
class ChartData
def self.logs_by_day(logs, klass)
days_with_hours = Hash.new{|h, k| h[k] = Hash.new(&h.default_proc)}
logs.each do |log|
if !log.klass.nil?
days_with_hours[log.klass.name][log.log_date] = log.total_hours
else
days_with_hours[@default][log.log_date] = log.total_hours
end
end
days_with_hours
end
end
このようにクラスやモデルをメソッドに渡したい
ChartData.logs_by_day(logs, Project)
モデル内のパラメーター Project を処理して、ログのインスタンス メソッドになるようにするにはどうすればよいですか?
かなり不器用な試み
1.9.3p125 :026 > Project.name.downcase
=> "project"
もっと良いですか?他のリファクタリングの提案は大歓迎です