ruby-on-rails - 验证特定操作的模型

标签 ruby-on-rails validation

我只需要为特定操作 (:create) 验证模型。我知道这不是一个好策略,但我只需要在我的情况下这样做。

我尝试使用类似的东西:

validate :check_gold, :if => :create

validate :check_gold, :on => :create

但我收到错误。问题是我不能让我的自定义 check_gold 验证在编辑时执行,而只能在创建时执行(因为检查黄金必须完成,只有在创建联盟时,而不是在编辑时)。

感谢阅读:)


我正在附加一些实际代码:

  attr_accessor :required_gold, :has_alliance
  validate :check_gold
  validate :check_has_alliance

这是联盟模型。 :required_gold 和 :has_alliance 都在 Controller 中设置(它们是虚拟属性,因为我需要来自 Controller 的信息)。现在,实际的验证器是:

  def check_gold
    self.errors.add(:you_need, "100 gold to create your alliance!") if required_gold < GOLD_NEEDED_TO_CREATE_ALLIANCE
  end

  def check_has_alliance
    self.errors.add(:you_already, "have an alliance and you cannot create another one !") if has_alliance == true
  end

这对创建非常有效,但我想限制它单独创建而不是编辑或脚手架的其他操作。

最佳答案

所有 ActiveRecord 验证器都有一个 :on 选项。

validates_numericality_of :value, :on => :create 

使用 validate_on_create 回调代替 validate:

validate_on_create :check_gold
validate_on_create :check_has_alliance

编辑:

如果您使用 validates_each,您可以使用可用于验证器声明的标准选项。

validates_each :required_gold, :has_alliance, :on => :create do |r, attr, value|
  r.check_gold if attr == :required_gold
  r.check_has_alliance if attr == :has_alliance
end

关于ruby-on-rails - 验证特定操作的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4280976/

相关文章:

ruby-on-rails - Ruby on Rails : undefined method `' for #<#<Class:>>

ruby-on-rails - 无法使用 mongoid 和 MongoDB 将新记录保存到我的 Rails 模型中

javascript - 仅接受数字和 + 符号的 HTML 输入

validation - 在域驱动设计中应该将输入验证放在哪里?

java - 相关字段的验证

javascript - 提交时不运行验证脚本

mysql - Rails 快速查找 has_many 关联与关联 ID 数组完全匹配的记录

ruby-on-rails - rails 重构技巧

javascript - javascript中的正则表达式问号

ruby-on-rails - 我应该对 Rails 弃用警告感到害怕吗?