例えば以下のような2つの関連Model(テーブル)があるとします
User,Book
でUserとBookは1対多関連してるとして
class User < ApplicationRecord has_many :books end class Book < ApplicationRecord belongs_to :user end
というようなmodelクラスが生成されているとして。
例えば/users/indexアクションに、およびviewにユーザーを表示したい場合
User.includes(:books).where(id : user_id)
というロジックを書くべきなのは
class User < ApplicationRecord has_many :books def show_user(user_id) self.includes(:books).where(id : user_id) end end もしくは class Book < ApplicationRecord belongs_to :user def show_user(user_id) User.includes(:books).where(id : user_id) end end
のどちらに記述するべきなのでしょうか?
Userの一覧を見せたい為、単一責任の原則に照らし合わせるとUserモデルに書くべきなのかなと思いますがいかがでしょうか?
またUserと紐づいているがBookとは関係ないユーザーが持つ何かのステータス一覧を表示したい場合、
Status.includes(:users).where(users: {id: user_id})
のようなメソッドを作成した場合は、Statusモデルに書くべきなのか、Userモデルにメソッドを書けばいいのか分かりません。(Userをincludesのレシーバにするというのは一端無の方向で。。。)
これをStatusに書いてしまうと、/users/indexにステータスと、ユーザーを表示したい場合、
User.new Status.new
と二つのモデルクラスのインスタンスを作成しなければならず冗長になってしまう気がします。
クラス設計で悩むことがおおいのですがどう解決すればよいでしょうか?
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/03 05:32
2019/12/03 05:33
2019/12/03 05:37
2019/12/03 05:39
2019/12/03 05:45