task_management_app's People
task_management_app's Issues
Show payment result when all days task in month is fixed
Create table
- rails g migration
- rails db:migrate
Login and logout features with sorcery
- install sorcery
- sign up features
- login features
Edit user account
Edit working result each day in a project
Header
admin. crud user_in_charge
[管理画面] UserInCharge一覧
- UserInCharge一覧を表示
- UserInCharge作成・編集・削除ボタンを作成
- UserInCharge作成・編集・削除機能を実装
admin. crud user_account
Change user name in header-nav with decorate
Create working result each day in a project as non-working day
[ご相談] レンダリングの効率化
レンダリングが効率的ではないと感じている部分が2点あり、ご相談させてくだい。
全体の背景・前提
各userの月ごとの稼働結果(work_results)を一覧化する#show_monthlyページがあります。
そこでは、(私なりに思いついた限界だったのですが…)以下のような処理としております。
============================================
- 以下のwork_results_controllerにて、show_monthlyメソッドで対象月の全日を列挙する
- html.erbにて、
(@beginning_of_month..@end_of_month).each do |day|
としてforループを回し、 - 各dayで以下のようなメソッドを用いて、各日のデータを取得している
(以下はshow_monthy.hrml.erbのサンプル図です)
※ なお、各日ごとのwork_resultを確認するためのページは別途以下にあります。
- https://github.com/daigomiyoshi/task_management_app/blob/master/app/views/work_results/show.html.erb
============================================
課題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されているので見てもらえればわかるかと思いますが、不明点などあれば仰ってください。
よろしくお願いいたします!
Projects index views
- 案件一覧表示
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の一覧へ遷移するボタンを作成
Delete working result each day in a project
Show user account
Show work results monthly in a project
able to show user_account with no bank_account info
- 振込先口座が登録されていなかった場合は「登録情報がない」と表示させる
Create working result each day in a project
admin. create log-in features
[管理画面]
- 管理画面のログイン画面
- ログイン後にトップ画面へ遷移
- トップ画面には以下の画面へ遷移するようにリンクを表示
- project一覧(その先にproject_category一覧へ遷移)
- user_in_charge一覧
- payment_result一覧
Rails new
Show working result each day in a project
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.