我正在使用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
答案 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