使用Rails 2.3.4、Ruby 1.8.7。
我有一个ActiveRecord验证,我想在错误消息中包括用户的输入。简化版的我正在做这样的事情:
record.errors.add attr, "'#{calculated_value}' is not valid.'
其中calculated_value
是用户输入的较大值的一部分。
我发现,如果用户输入包含特定字符的值,就会发生奇怪的事情。如果calculated_value
包含%s
,则%s
将替换为用户输入的完整值。如果calculated_value
包含..
,我得到:
ArgumentError - interning empty string from /var/lib/gems/1.8/gems/activesupport-2.3.4/lib/active_support/vendor/i18n-0.1.3/lib/i18n.rb:196:in `to_sym'.
我想知道如何禁用该功能,或者如何转义这些值。我尝试将%s
转义为%%s
,sprintf样式,但这不起作用。
我不知道这个方法在第2.3.4节中是否可用。但你能试试activerecord Inclusion吗。此帮助程序验证属性的值是否包含在给定的集合中。所以你的代码将类似
class YourModel< ActiveRecord::Base
validates :calculated_value, :inclusion => { :in => %w(Valid Values you want),
:message => "%{calculated_value} is not a valid value" }
end