fast_jsonapiで、Railswayに乗ってないbelongs_toを定義する

問題

以下のような、ナチュラルキーを使用しているなどして、関連にforeign_key、primary_keyを指定している場合を例にする。

class Book < ApplicationRecord
  has_many :sells, foreign_key: :isbn, primary_key: :isbn
end

class Sell < ApplicationRecord
  belongs_to :book, foreign_key: :isbn, primary_key: :isbn
end

SellSerializerにbelongs_to: bookを定義したいが、book_idを探しに行ってしまう。

class SellSerializer
  include FastJsonapi::ObjectSerializer

  belongs_to: book
end

render json: SellSerializer.new(sell).serialized_json
=> #<NoMethodError: undefined method `book_id' for #<Sell:0x000000000000>

対策

ブロックにて、明示的にbookを返してやる。

class SellSerializer
  include FastJsonapi::ObjectSerializer

  belongs_to: book do |object|
    object.book
  end
end

環境

  • fast_jsonapi 1.4

備考

他のオプションを使っても、解決できるかも。