如何在活动记录验证消息中显示其他属性

时间:2014-06-17 06:48:21

标签: ruby activerecord

我正在使用ActiveRecord验证,并带有自定义错误消息。我遇到的问题是我想在错误消息中再显示一个属性。例如,以下代码仅显示正在运行验证的值。

class Coffee < ActiveRecord::Base
  validates :size, inclusion: { in: %w(small medium large),
    message: "%{value} is not a valid size" }
end

我是否还可以显示类型(假设类型是Coffee表中的字段),以下两种尝试都不起作用:

class Coffee < ActiveRecord::Base
  validates :size, inclusion: { in: %w(small medium large),
    message: "%{value} is not a valid size for type: %{type}" } #`method_missing': undefined local variable or method `type'
    message: "%{value} is not a valid size for type: #{type}" } #Error: i18n::MissingInterpolationArgument
end

版本:

ActiveRecord: 3.1.6
Ruby: ruby-1.9.3-p429

2 个答案:

答案 0 :(得分:2)

您可以使用自定义验证执行此操作

class Coffee < ActiveRecord::Base
  validate :size_for_type

  def size_for_type
    unless %w(small medium large).include?(size)
      errors.add(:size, "%{value} is not a valid size for type: #{type}")
    end
  end
end

答案 1 :(得分:2)

您可以像这样使用 lambda

class Coffee < ActiveRecord::Base

validates :size, inclusion: { in: %w(small medium large), :message=> lambda { |e| "#{e.size} is not a valid size for type #{e.type}"}

end