[Rails]store_accessor

Railsにはストアアクセサ機能があり、 store_accessor を定義するとActiveRecordのattributeと同じようにストアの属性を変更できるようになる

https://api.rubyonrails.org/classes/ActiveRecord/Store.html

コードは以下の記事から引用 https://techracho.bpsinc.jp/hachi8833/2021_07_19/74562

class Account < ApplicationRecord
  store_accessor :settings, :color
end

acc = Account.new
acc.color_changed? #=> false

acc.color = "red-n-white"
acc.color_changed? #=> true

バリデーションも可能

class RangeQuestion < ActiveRecord::Base
  after_commit :recalculate_answers_scores, on: :update, if: :answer_was_changed?
  # RangeQuestionでは`min`値と`max`値に収まる正しい回答を期待する
  store_accessor :options, :min, :max
  # なおストアアクセサは通常の属性と同じ方法でバリデーションできる
  validates :min, :max, presence: true, numericality: { only_integer: true }
end