Giter Site home page Giter Site logo

task_management_app's People

Contributors

daigomiyoshi avatar

Watchers

 avatar  avatar

task_management_app's Issues

admin. crud user_in_charge

[管理画面] UserInCharge一覧

  • UserInCharge一覧を表示
  • UserInCharge作成・編集・削除ボタンを作成
  • UserInCharge作成・編集・削除機能を実装

[ご相談] レンダリングの効率化

レンダリングが効率的ではないと感じている部分が2点あり、ご相談させてくだい。

全体の背景・前提

各userの月ごとの稼働結果(work_results)を一覧化する#show_monthlyページがあります。

そこでは、(私なりに思いついた限界だったのですが…)以下のような処理としております。

============================================

  1. 以下のwork_results_controllerにて、show_monthlyメソッドで対象月の全日を列挙する
  1. html.erbにて、(@beginning_of_month..@end_of_month).each do |day| としてforループを回し、
  2. 各dayで以下のようなメソッドを用いて、各日のデータを取得している

(以下はshow_monthy.hrml.erbのサンプル図です)
スクリーンショット 2021-05-22 19 32 03

※ なお、各日ごとのwork_resultを確認するためのページは別途以下にあります。

============================================

課題1. SQLクエリを全日走らせてしまう

各dayをforループで回して、filter_by_year_month_dayで対象日のデータを取得するので、show_monthlyページを見るたびに、全日(28日~31日)分のクエリが走ってしまいます。

一回で一月分のデータをController側で取得してからview側でそのデータを処理するという形にしようとすると、稼働実績のない日が飛ばされてしまう(表示されない)ので、このような形で処理しています。
実装自体はできていますが、処理速度の観点から、もし改善できそうな点があればご教示ください。

課題2. レンダリングの分岐処理がキレイではない

各dayで稼働実績があるかないかでviewの表示を変えたいため、以下のように、Controller側のメソッドを呼び出して、viewで表示される情報を変えております。

しかし、(Controller側のコードを見てもらえればわかりますが)例えば以下のようにhtmlをベタ打ちさせているような状態であまりキレイではないなかと思ってます(苦肉の策的に生み出したました…)

if-elseロジックをあまりview側に寄せたくないということでこのような書き方としておりますが、

  • Controller側でよりよい書き方があるか
  • あるいはここまでController側で実装するなら、view側にif-elseを寄せた(viewをfatにする)方が良いか
    など改善コメントがあればご教示ください。

お手数ですが、よろしくお願いいたします!

[ご相談] ルーティングのより効率的な書き方

各userが、projects(案件, プロジェクト)の一覧から、各projectの年月日毎の詳細に飛んでいき、そこでCRUD機能を内包させております。
色々と試行錯誤しながらも、既に以下のルーティングで実装しておりますが、あまりDRYな書き方ではなく…、
もう少し効率的・Betterな書き方などあればご教示いただければ幸いです。

  root 'projects#index'
  get 'projects/:project_id/:year/:month', to: 'work_results#show_monthly', as: 'work_result_monthly'
  get 'projects/:project_id/:year/:month/:day', to: 'work_results#new', as: 'new_work_result_daily'
  put 'projects/:project_id/:year/:month/:day', to: 'work_results#create', as: 'create_work_result_daily'
  get 'projects/:project_id/:year/:month/:day', to: 'work_results#show', as: 'work_result_daily'
  get 'projects/:project_id/:year/:month/:day/edit', to: 'work_results#edit', as: 'edit_work_result_daily'
  patch 'projects/:project_id/:year/:month/:day', to: 'work_results#update', as: 'update_work_result_daily'
  delete 'projects/:project_id/:year/:month/:day', to: 'work_results#destroy', as: 'delete_work_result_daily'

 
(補足)

  • projectsとusersがwork_results(どのuserがどのprojectsでどのくらい稼働しているかを記録するtransaction中間テーブル)で多対多で関連付けされています
  • 基本的に各userは自分のprojectに対応する稼働しかCRUDしないので、user_idのURIはなしで、work_results_controller内でcurrent_userのみの情報として処理する想定です
  • work_result#show_monthlyではmonthlyレベルで表示させ、そこからdailyにnew, create, edit, update, destroyさせます
  • また画面遷移のイメージは以下のようなイメージです。
    https://www.figma.com/file/gPwIS5Iqzw6v67c5RCcvdi/task_management_app_v01?node-id=0%3A1

(参考情報)色々探しましたが、Officialリファレンス含めて以下情報あたりが探せる限界でした…。
ActionDispatch::Routing (Pretty URLs部分)
Rails /(year)/(month)/(day) separate pages
基礎Ruby on Rails Chapter3 コントローラ

コードは実装済みのものはmasterへpushされているので見てもらえればわかるかと思いますが、不明点などあれば仰ってください。
よろしくお願いいたします!

admin. crud payment_result

[管理画面] PaymentResult一覧

  • PaymentResult一覧を表示
  • PaymentResult作成・編集・削除ボタンを作成
    • 編集画面で、支払通知書URLを入力できるようにする
  • PaymentResult作成の際は、以下のような機能をもって作成できるようにする
    • PaymentResultのworking_month, user_id, project_idに該当しないWorkResultのトランザクションデータUser × Projectの「稼働FIX日数・金額」を一覧で表示
    • 確定ボタンを押したらCreateされるようにする

admin. crud project_category

[管理画面] ProjectCategory一覧

(各Projectから遷移)

  • ProjectCategory一覧を表示
  • ProjectCategory作成・編集・削除ボタンを作成
  • ProjectCategory作成・編集・削除機能を実装

admin. crud project

[管理画面] Project一覧

  • Project一覧を表示
  • Project作成・編集・削除ボタンを作成
  • Project作成・編集・削除機能を実装
  • 各Projectからproject_categoriesの一覧へ遷移するボタンを作成

admin. create log-in features

[管理画面]

  • 管理画面のログイン画面
  • ログイン後にトップ画面へ遷移
  • トップ画面には以下の画面へ遷移するようにリンクを表示
    • project一覧(その先にproject_category一覧へ遷移)
    • user_in_charge一覧
    • payment_result一覧

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.