[英]Run a validation based on enum value in rails
I am working on a rails app and want to validate some fields based on enum
. 我正在开发Rails应用程序,并希望根据enum
验证某些字段。 This is what I tried. 这就是我尝试过的。 But am getting some errors 但是出现一些错误
class Listing < ActiveRecord::Base
enum status: [:draft, :published]
scope :draft, -> { where status: :draft }
scope :published, -> { where status: :published }
validates_presence_of :attribute1, :attribute2, :attribute3, unless: "status.draft?", on: :update
def publish!
self.update status: :published
end
end
All my status
fields have a default value of 0
which will be draft
. 我所有的status
字段的default value of 0
,它将是draft
。 When I update
a listing am getting this error. update
清单时出现此错误。
undefined method `draft?' 未定义的方法“草稿?” for "draft":String 对于“草稿”:字符串
Its happening during the @listing.update(params)
. 它发生在@listing.update(params)
。 Could someone tell me what am doing wrong here? 有人可以告诉我这里做错了什么吗?
When you call enum method, you should not call method from status
. 调用枚举方法时,不应从status
调用方法。 just call from object. 只是从对象调用。
It means that do not call @listing.status.draft?
这意味着不要调用@listing.status.draft?
, call @listing.draft?
,致电@listing.draft?
so, do unless: 'draft?'
因此, unless: 'draft?'
instead of unless: 'status.draft?'
而不是unless: 'status.draft?'
and also you do not need to define scope for status. 并且您也不需要定义状态范围。 It automatically define scope methods for enum. 它自动为枚举定义范围方法。
Read doc: http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html 阅读文档: http : //edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.