【问题标题】:Ruby Sequel model to have validation for create and not updateRuby Sequel 模型对创建而不是更新进行验证
【发布时间】:2014-10-17 01:47:54
【问题描述】:

我怎样才能避免在验证update 的同时验证create?例如:

我希望有一个image 字段以在create 上有presence validation。但是想在edit中避免它,并在没有变化的情况下假设以前的值。

注意:我正在使用 Padrino。

【问题讨论】:

    标签: ruby sequel


    【解决方案1】:

    在 Sequel 中,验证通常使用 validation_helpers 插件在实例级别完成。因此,如果您只想验证新对象而不是现有对象,则只需使用标准 ruby​​ 条件:

    plugin :validation_helpers
    def validate
      super
      validates_presence :image if new?
    end
    

    【讨论】:

    • 哇,不知道new? 存在!无论如何,它是一个很棒的 ORM,谢谢!
    【解决方案2】:

    你可以这样说:

    validates :image, :presence => true, on: :create
    

    这意味着您将仅在创建时进行验证。

    【讨论】:

      【解决方案3】:

      在 Rails 中,

      Rails 中的“validates”关键字带有一个允许您执行此操作的参数:

      validates :your_validator, :presence => true, :on => :create
      

      你也可以在那里传递一个数组:

      validates :your_validator, :presence => true, :on => [:create, :update]
      

      在帕德里诺,

      我相信使用 datamapper 的 padrino - DM 具有上下文验证。因此,您可以进行上下文验证。

      validates :image, :presence => true, :when => [:custom]
      

      然后在保存的时候,你可以这样做:

      post.save(:custom)
      # OR
      post.valid?(:custom)
      

      上下文 :custom 可以在不同的地方使用。

      【讨论】:

      • 我认为这是特定于 Rails 的助手。我正在使用 Padrino,我可能应该提到我的错误。
      • 我没想到它是帕德里诺模型 :) 我已经更新了我的答案。我相信 Padrino 使用数据映射器。
      • 不,Padrino 与 ORM 无关,我正在使用 Sequel。无论如何感谢您的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多