質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

1027閲覧

railsでのslim controller、fat modelの実現方法について

oeiqgfodgfhps

総合スコア35

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2022/01/11 04:05

お世話になっております。
現在railsでアプリを作っているのですが、Controllerに下記のような処理があります。railsのような MVCフレームワークではcontrollerをなるべくスリムにして、モデルやヘルパーにビジネスロジックを詰め込んだほうがいいという話を聞いたのですが、具体的な実現方法がわかりません。
自分の所感としては、モデルに入れる処理は検索系の処理や、DBに関わるビジネスロジックだと思っています。しかし、日付のフォーマットや下記のコードのように、データベースのある値を集計して、合計を出す処理(~~_amountの部分です。)などはどこに書けばいいのでしょうか??

ruby

1 def index 2 @wdays = %w[日 月 火 水 木 金 土] 3 if params[:year_month] 4 inputs = params[:year_month][0].split('-').map(&:to_i) 5 @start_date = Date.new(inputs[0], inputs[1], 1) 6 @end_date = Date.new(inputs[0], inputs[1], -1) 7 @month = inputs[1] 8 else 9 day = Date.today 10 @start_date = Date.new(day.year, day.month, 1) 11 @end_date = Date.new(day.year, day.month, -1) 12 @month = day.month 13 end 14 @data = [] 15 restraint_amount = 0 16 work_amount = 0 17 break_amount = 0 18 (Date.parse(@start_date.to_s)..Date.parse(@end_date.to_s)).each do |date| 19 @date = date 20 record = current_user.attendances.where(work_in: date.all_day).first 21 if record 22 restraint_amount += record.restraint_time 23 work_amount += record.work_time 24 break_amount += record.break_time 25 end 26 record ||= current_user.attendances.build 27 @data.append record 28 end 29 @restraint_data = time_to_view_data(restraint_amount) 30 @work_data = time_to_view_data(work_amount) 31 @break_data = time_to_view_data(break_amount) 32 end 33 # ruboc

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

データベースのある値を集計して、合計を出す処理

計算用のロジックだけ、別なクラスに切り出すのがいちばんスッキリします。

投稿2022/01/11 05:10

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oeiqgfodgfhps

2022/01/11 05:13

paarms[:year_month]で渡ってきた値を使ってDBを検索しているのですが、これはモデルにうまく入れれないでしょうか??
maisumakun

2022/01/11 05:15

なぜモデルで行う必要があるのでしょうか?
maisumakun

2022/01/11 05:17

(fat modelは、「fat controllerよりは改善している」という程度の意味合いで、積極的に「コントローラーを肥大化させる」ことが善だというわけではありません。機能的に区切れるものであれば別なクラスへくくりだしたほうが扱いやすいです)
oeiqgfodgfhps

2022/01/11 06:50

質問が間違っていました。 paarms[:year_month]で渡ってきた値を使ってDBを検索しているのですが、この処理をControllerの外で行うことはアリなのでしょうか
maisumakun

2022/01/11 06:53

はい、コントローラーからpaarms[:year_month]だけ別なところに渡せば、それで問題ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問