業務で、サービスクラスを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)