我有一个Rails 5模型,其中有
enum status: [:st1, :st2, :st3]
我想使用字符串或符号设置其状态。如何确定字符串属于status
可以具有的值列表?
答案 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