サービス層の導入
業務で、サービスクラスをmodels
に入れていたので、そのファイルの移動と自作でサービス層を追加しました。
service
クラス
Model
に書くにはコードの量が多い機能で、Fat model
になる恐れがあり、concern
に移す事も考えましたが、共通で利用することもないため
サービス層にロジックを移すことにしました。
ファイルの設置
app
下に、ファイルを作ります。
app/services/select_info_service.rb
class SelectInfoService def initialize(info) @title = info[:title] @body = info[:body] end def search ... end private attr_accessor :title、:body end
autoload_pathに追加
# config/application.rb config_autoload_path += "#{config.root}/app/services/**/*.rb"
Rails 5では、config/initialize/..
にファイルを作成すること推奨しています。
./bin/rails c
si = SelectInfoService.new si.search
module
化して、/lib
に置くか。共通処理であれば、controllers/concerns
または、
models/concerns
に置くか。迷うが、割とapp
の下にファイルを設置することが多く、それに見習った。
参考
Railsでサービスとフォームを導入してみる話 - assertInstanceOf('Engineer', $a_suenami)