2018-03-18

JSON型の属性に対してcomposed_ofを使うと便利かも

具体的には次のようなケース。JSONの内容からなにか導出するメソッドを値オブジェクトに持たせられる。

class Foo < ApplicationRecord
  # barはJSON型やJSONB型
  composed_of :bar, converter: ->(raw_bar) { Bar.new(raw_bar) }
  # ...
end

class Bar
  def initialize(raw_bar)
    @raw_bar = raw_bar
  end

  def name
    "#{raw_bar['bar']['first_name']} #{raw_bar['bar']['last_name']}"
  end
end

foo = Foo.new(bar: { bar: { first_name: 'ky', last_name: 'mmt' } })
foo.bar.name #=> 'ky mmt'

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です