issueによると今後サポートされそうだが、今から使いたいと思うのでやり方を記しておきます。
簡単な流れ
jsonapi-resourcesの作りでは acts_as_resource_controller
をincludeしたコントローラーは append_before_filter
で setup_request
を差し込みます。
setup_request
でparamsなどの情報を集めてリクエストを解釈する準備をして、その後の process_request_operation
で利用しています。
jsonapi-resourceにおいて関連モデルを一緒に取得したいときはクエリパラメタ include
にカンマ区切りでモデル名を書いていきます。
つまり
setup_request
をオーバーライドして params
をいじってやればいいわけです。
class MyController < ApplicationController
include JSONAPI::ActsAsResourceController
def setup_request
params['include'] = 'user,commentable' unless params['include']
super
end
end
どういうときに役立つのか
ember/data
と併用しているときに mode.get('relationships')
するときに発生する通信にクエリパラメタが付与できないので、これでどうにかできる。
Resourceで宣言したい
api/v1/hoge_resource.rb
class Api::V1::HogeResource < JSONAPI::Resource
def self.default_included
%(saba miso ni)
end
end
api/v1/base_controller.rb
def setup_request
resource_name = params[:controller].split('/').map(&:classify).tap { |names|
names[-1] += 'Resource'
}.join('::')
resource = Object.const_get(resource_name)
if resource.respond_to?(:default_inclusions)
splitted = (params[:include] || '').split(',')
splitted.concat(resource.default_included)
params[:include] = splitted.join(',')
end
super
end