简体   繁体   English

根据Rails中的枚举值运行验证

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM