##enum
enumはint型、boolean型で定義されたカラムを、文字列で表現できるようにする機能です。
【例】
class Drink < AppricationRecord
# Drinkモデルのkindrカラムのenumを定義する
# DBに保存されている値が0の時はtea, 1の時はcoffee、2の時はbeerを意味する
enum kind: [:tea, :coffee, :beer]
end
【例】
@drink = Drink.new(kind: 1)
@drink.kind
# => 'coffee'
# 数字ではなくenumで定義したキーワードが返ってくる
enumを利用すると、数字と対応した文字列を返り値として出力できるようになります。
##scope
scopeはモデルに対する絞り込みの条件に名前をつけて、メソッドのように呼び出し可能にする機能です。よく使う検索ロジックはscopeにしておくことによって、後から簡単に再利用できるようになります。
【例】今回はTaskモデルに「incoming」という名前でscopeを定義します。
app/models/task.rb
class Task < ApplicationRecord
enum kind: { individual: 0, work: 1, others: 2 }
scope :incoming, -> { where('start_at > ?', Time.zone.now) }
end
定義したscopeを使って@tasksを再定義します。
app/controllers/tasks_controller.rb
class TasksController < ApplicationController
def index
@task = Task.new
# モデルに定義したscopeはメソッドのように呼び出せる
@tasks = Task.incoming.order(start_at: :asc)
end
# 以下省略
##参考リンク
enumリファレンス(英語)
enum_help Githubリポジトリ
[Rails ModelのScope(スコープ)の使い方]
(http://ruby-rails.hatenadiary.com/entry/20140814/1407994568)