実現したいこと
Railsで予定と実績と管理するシステムを作っています
ユーザ毎のタスクの日別予定合計値と実績合計値を出力するところで詰まっており、投稿しました。
最終的には、Chart.jsで2軸の棒グラフを出力予定です。
前提
User --* Task
Userに複数のタスクが紐付いています
task table
create_table "tasks", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.string "name" t.bigint "user_id" t.bigint "category_id" t.float "estimated_time" t.float "actual_time" t.datetime "start_time" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["category_id"], name: "index_tasks_on_category_id" t.index ["user_id"], name: "index_tasks_on_user_id" end
start_timeはdatetimeとなっており、タスクの実施日としています。こちらをキーに日別の合計値を出したいと思っております。
task table 例
Task Id | Name | User Id | Category Name | Estimated ime | Actual_time | Start time |
---|---|---|---|---|---|---|
1 | hoge1 | 1 | work | 2 | 3 | 2020/05/17 |
2 | hoge2 | 1 | mtg | 2 | 3 | 2020/05/11 |
3 | hoge3 | 1 | mtg | 2 | 3 | 2020/05/11 |
: | : | : | : | : | : | : |
実現したい例
Start time | Estimated ime の SUM | Actual_time の SUM |
---|---|---|
2020/05/11 | 4 | 6 |
2020/05/17 | 2 | 3 |
2020/05/21 | 2 | 3 |
2020/06/06 | : | : |
現状
@estimated_time = Task.where(user: 1).group("DATE(start_time)").sum(:estimated_time) 出力結果 {Sun, 10 May 2020=>2.0, Sat, 16 May 2020=>2.0, Wed, 20 May 2020=>2.0, Fri, 05 Jun 2020=>3.0, Mon, 08 Jun 2020=>1.0, Mon, 29 Jun 2020=>1.0}
上記のコードで一つのカラムの合計値は取れるのですが、実現したい、予定と実績の2つの合計値を別々に出力し、インスタンス変数に格納できていないです。
arelを活用、SQLをRailsに組み込むなど?実現方法がわからない状態となっております。
補足情報(FW/ツールのバージョンなど)
Rails 5.2.4.1
Ruby 2.4.3
mysql 5.7
ご意見や参考になる記事等をご教示いただけると嬉しいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。