1. masuidrive

    Posted

    masuidrive
Changes in title
+長くなりがちなRailsのモデルをきれいに分割する
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,41 @@
+Railsでアプリを作っていると、app/models/以下にあるモデルファイルの行数が非常に長くなることになります。
+
+そこでincludeメソッドを使ってモデルファイルを機能毎に分割してみましょう。
+
+ファインダー関係のメソッドだけを、user/finder.rbに切り出します。
+このときクラスメソッド関係は通常の定義方法が異なります。
+
+クラスメソッドの定義は、ClassMethodsモジュールの中で行う様にします。
+
+has_many, belongs_toなどのクラスメソッドの実行は、self.includedの中でbase.has_manyの様にして呼び出します。
+
+```ruby:app/models/user.rb
+class User < ActiveRecord::Base
+ include User::Finder
+end
+```
+
+```ruby:app/models/user/finder.rb
+module User::Finder
+ def self.included(base)
+ base.extend ClassMethods
+
+ # クラスメソッドの呼び出し
+ base.has_many :items
+ end
+
+ # クラスメソッドの定義
+ module ClassMethods
+ def hot
+ ...
+ end
+ end
+
+ # インスタンスメソッドの定義
+ def search(str)
+ ...
+ end
+end
+```
+
+このようにしてファイルを分けることで、モデルファイルが大きくなるのを避けられ機能毎に整理することができます。