概してビジネスロジックはモデルに書き、複数にまたがるようなモデル操作を行う場合はService層に処理を逃がすというのがMVCの定説だと思いますが、いまいち腑に落ちない点があります。
①
例えば単純にBookテーブルから1件テーブルからレコードを取得してViewに表示したい場合
class BookController < ApplicationController def show @book = Book.find_by(user_id: current_user.id) end end
と書けると思いますが以上のように1行の短いコードの場合でもモデル層に逃がすべきなのでしょうか?
class Book < ApplicationRecord belongs_to :user def find_book(id) Book.find_by(user_id: id) end end
②
また例えばこのshowアクションで、Bookと共に関連のないモデル(例えばですがCountry)をView側で表示したい場合以下のように書くとします
class BookController < ApplicationController def show @book = Book.find_by(user_id: current_user.id) @country = Country.find_by(user_id: current_user.id) end end
これをモデルクラスにロジックを逃がす場合、BookコントローラーのshowアクションでCountryを表示したいからCountryモデルに対する操作をBookモデルで行うことは悪手なのでしょうか?
class Book < ApplicationRecord belongs_to :user def find_book(id) Book.find_by(user_id: id) end def find_country(id) Country.find_by(user_id: id) end end
こうすればコントローラー側でBookモデルのインスタンスを1つ作るだけでいいので便利な気もするんですが。。。
class BookController < ApplicationController def show books = Book.new @book = books.find_book(current_user.id) @country = books.find_country(current_user.id) end end
正直Railsでどうソフトウェア設計を行っていくべきか皆目見当ついていません。
ネットで初心者向けリファレンス見ると結構コントローラー側でビジネスロジック書いている例も多いですし。。。
宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。