Ruby on rails 如何在:if验证中使用枚举值

Ruby on rails 如何在:if验证中使用枚举值,ruby-on-rails,enums,ruby-on-rails-5,Ruby On Rails,Enums,Ruby On Rails 5,假设我们有一个枚举 enum status: { pending: 0, finished: 1, extended: 2 } 我们希望根据枚举状态的值创建一个验证 validates_presence_of :explanation, if: ...enum status is equal to "extended" 我一直是蛮力,尝试了许多组合,但似乎找不到任何有效的 您可以使用pending? class Job < ActiveRecord::Base enum statu

假设我们有一个枚举

enum status: { pending: 0, finished: 1, extended: 2 }
我们希望根据枚举状态的值创建一个验证

validates_presence_of :explanation, if: ...enum status is equal to "extended"

我一直是蛮力,尝试了许多组合,但似乎找不到任何有效的

您可以使用
pending?

class Job < ActiveRecord::Base
  enum status: [ :active, :archived ]
  validates_presence_of :explanation, if: Proc.new { |a| a.extended? }
end
类作业
完整示例:

class Conversation < ActiveRecord::Base
  enum status: [ :active, :archived ]
end

# conversation.update! status: 0
conversation.active!
conversation.active? # => true
conversation.status  # => "active"

# conversation.update! status: 1
conversation.archived!
conversation.archived? # => true
conversation.status    # => "archived"

# conversation.status = 1
conversation.status = "archived"

conversation.status = nil
conversation.status.nil? # => true
conversation.status      # => nil
类对话真的
conversation.status#=>“活动”
#对话。更新!现状:1
对话,存档!
会话是否已存档?#=>真的
conversation.status#=>“已存档”
#会话状态=1
conversation.status=“已存档”
conversation.status=nil
conversation.status.nil?#=>真的
conversation.status#=>无
参考资料:
短版:

validates_presence_of :explanation, if: 'extended?'

美好的这也适用于符号:
if::extended?