LoginSignup
1
1

More than 5 years have passed since last update.

デフォルトでincludeする関連を指定する[Specify Default Included Resource(s)]

Last updated at Posted at 2015-09-18

issueによると今後サポートされそうだが、今から使いたいと思うのでやり方を記しておきます。

簡単な流れ

jsonapi-resourcesの作りでは acts_as_resource_controller をincludeしたコントローラーは append_before_filtersetup_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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1