Enums field guide

Querying

Record.where(status: "approved").count
Record.where(status: :approved).count
Record.where(status: 1).count
Record.approved.count

Все эти варианты превращаются в один и тот же SQL-запрос:

SELECT COUNT(*) FROM "records" WHERE "records"."status" = $1  [["status", 1]]

Filtering

records = Record.approved.limit(3)

Correct:

records.select { |r| r.status == "approved" }.map(&:id) #=> [3, 4, 5]
records.select { |r| r.approved?            }.map(&:id) #=> [3, 4, 5]

Incorrect:

records.select { |r| r.status == 1         }.map(&:id) #=> []
records.select { |r| r.status == :approved }.map(&:id) #=> []
records.select { |r| r.status.approved     }.map(&:id) # NoMethodError
records.select { |r| r.approved            }.map(&:id) # NoMethodError

Ссылки

Редактировать