enumで特定の値を除外する場合

2018/12/20 | Ruby on Rails

enumで選択肢が2つある場合

# models/blog.rb

class Blog < ApplicationRecord
  enum status: { published: 0, unpublished:1 }
end

などは

Blog.published

などで取得できますが、選択肢が3つある場合

# models/blog.rb

class Blog < ApplicationRecord
  enum status: { published: 0, unpublished:1, draft:2 }
end

に、draft以外を取得したい時などがあります。その際には

Blog.where(status: [:published, :unpublished])

Blog.where.not(status: :draft)

などで指定した値を削除することが出来ます。

# models/blog.rb

class Blog < ApplicationRecord
  enum status: { published: 0, unpublished:1, draft:2 }
  def self.not_delated
    where.not(status: :draft)
  end
end

などで

Blog.not_delated

でも取得可能ですね。非常に便利です。