检查stgitng是否属于枚举值

时间:2018-11-07 12:29:33

标签: ruby-on-rails ruby ruby-on-rails-5

我有一个Rails 5模型,其中有

enum status: [:st1, :st2, :st3]

我想使用字符串或符号设置其状态。如何确定字符串属于status可以具有的值列表?

2 个答案:

答案 0 :(得分:0)

这就是默认情况下的工作方式。如果您尝试分配其他内容,则会引发异常

ArgumentError: <value> is not a valid <your_enum>

答案 1 :(得分:0)

您可以创建类似Marek的方法来在更新之前检查密钥是否有效:

def self.validate_status(some_status)
  ModelName.statuses.keys.include?(some_status.to_sym)
end

或者您可以通过以下方式从ArgumentError中抢救ApiController(如果您使用的是API):

rescue_from ArgumentError, with: :render_status_error

def render_status_error(exception)
  logger.info(exception)
  render json: { error: 'Invalid status' }, status: :bad_request
end