class Order < ApplicationRecord
attr_accessor :token
validates :price, presence: true
end
attr_accessor
値別 | 基本構文 |
---|---|
# シンボルの場合 | attr_accessor :インスタンス変数名 |
# 文字列の場合 | attr_accessor 'インスタンス変数名' |
attr_accessorとは、インスタンス変数の読み取り専用のメソッドと書き込み専用のメソッド(セッター/ゲッター)の両方を定義することが出来るメソッドのことです。Rubyでは、以下のコードのように記述してクラス外部からインスタンス変数にアクセスしようとすると、「インスタンス変数にアクセスするためのメソッドが定義されていない」というエラーが発生します。これにより、クラス外部からのインスタンス変数の参照や変更が出来ません。
このように、attr_accessorメソッドはインスタンス変数にアクセスするためのメソッドを裏側で定義してくれます。そして、attr_accessorメソッドに指定されたインスタンス変数は、クラス外部から参照と変更の両方を行う事が出来ます。
class User
attr_accessor :name, :age # この記述で@name,@ageへアクセス出来る
def initialize(name, age)
@name = name
@age = age
end
end
tanaka = User.new('田中太郎', 18)
tanaka.age = 33
参考:Pikawaka 【Ruby】attr_accessorメソッド初心者入門書~使い方と必要な理由を理解しよう
http://pikawaka.com/ruby/attr_accessor
モデルのバリデーション
tokenはordersテーブルに存在しないため、本来はOrderモデルのバリデーションとしては記載することはできません。しかしながら、前のステップでattr_accessor :tokenと記載したことにより、tokenについてのバリデーションを記述することができます。
class Order < ApplicationRecord
attr_accessor :token
validates :price, presence: true
validates :token, presence: true
end