【问题标题】:Run a validation based on enum value in rails基于 Rails 中的枚举值运行验证
【发布时间】:2016-01-03 05:54:10
【问题描述】:

我正在开发一个 Rails 应用程序,并希望根据 enum 验证一些字段。这是我尝试过的。但是我遇到了一些错误

         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

我所有的status 字段都有一个default value of 0,即draft。当我update 列表出现此错误时。

未定义的方法“草稿?”对于“草稿”:字符串

它发生在@listing.update(params) 期间。有人可以告诉我这里做错了什么吗?

【问题讨论】:

    标签: ruby-on-rails enums


    【解决方案1】:

    当你调用枚举方法时,你不应该调用来自status的方法。只需从对象调用。

    表示不调用@listing.status.draft?,调用@listing.draft?

    所以,请使用unless: 'draft?' 而不是unless: 'status.draft?'

    而且您也不需要定义状态范围。它自动为枚举定义范围方法。

    阅读文档:http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html

    【讨论】:

    • 真的帮助了队友..感谢您的信息..以前从未使用过枚举,想知道做错了什么...谢谢...
    猜你喜欢
    • 1970-01-01
    • 2014-10-25
    • 2010-09-06
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2019-06-05
    • 2019-07-08
    • 2015-06-29
    相关资源
    最近更新 更多