2011-02-14 9 views
0

私は、ユーザーにタイム・ログ(日付を持つ)を持つデータ・モデルを持っています。Rails 3.0で複雑なデータを照会する

私は、データテーブルを吐き出させ、タイムロッグを持つ各ユーザをリストアップし、クエリされた期間に毎日記録された時間の合計を列挙する方法で自分のDBをクエリしようとしていますエッセンスを毎週のタイムシートに)。

私はこれを行う方法を考え出すことに問題があります。何か案は?

+0

現在設定しているもの(モデルなど)に関する詳細情報を追加してください。 – jmccartie

+0

前述のとおりです。 2つのモデル。ユーザーとタイムロッグユーザーはタイムログを持っています –

答えて

1

詳細の多くは、データモデルに依存するが、短い答えは、最初の関係を作成することです:あなたはそれを行うたら

class User < ActiveRecord::Base 
    has_many :user_timelogs 
    has_many :timelogs, :through => :user_timelogs 
end 

class UserTimelog < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :timelog 
end 

class Timelog < ActiveRecord::Base 
    has_many :user_timelogs 
    has_many :users, :through => :user_timelogs 
end 

、あなたがユーザーのためにtimelogsを照会することができます

User.all.timelogs 

追加のクエリ(特定の日付、合計など)を追加できます。 Railsは、そのクエリを絞り込む方法についての詳細はガイドチェックアウト:

http://guides.rubyonrails.org/active_record_querying.html

+0

うん、ちょっとしたことが分かりました。これは実行中のアプリです。私はこのかなり複雑なレポートをどのように行うのかに興味があります... –

+0

あなたはそれについて言及していませんでしたので、私はあなたが最初から始めていると仮定しました。私の答えに敬意を表してくれてありがとう。 :| – jmccartie

+0

...この回答は下降していたはずの理由はありません。 – Andrew

0

回を想定し、これを試してみてください各timelog行のための「期間」欄に秒数として格納されます。

Timelog.where(...). # your time period 
     joins(:users). 
     group('users.id'). 
     sum('duration') 

これは、ユーザーIDをキーとして、期間の合計を値として持つハッシュを提供します。

関連する問題