他のメンバーがコードを読むときに知っておいてほしいことを意識して、以下の順に書いている。
- モジュール
- 定数
- 関連
- 属性(
enum
,attribute
など) - コールバック
- バリデーション
- スコープ
- クラスメソッド
- インスタンスメソッド
- プライベートメソッド
以下のコードは例のために書いてみたけど、動くかわからない。
class Pokemon < ApplicationRecord
include Tradable
INITIAL_HP_RANGE = 10..20
belongs_to :master
has_many :skills
enum gender: %i[male female]
before_validation :set_initial_hp, on: :create
validates :name, presence: true
validates :hp, numericality: { greater_than_or_equal_to: 0 }
scope :first_generation, -> { where(id: (1..151).to_a) }
def self.capture
# ...
end
def attack
# ...
end
private
def set_initial_hp
self.hp = rand(INITIAL_HP_RANGE)
end
end