Rails验证消息奇怪地处理百分号和双倍期

时间:2012-09-10 00:36:41

标签: ruby-on-rails validation activerecord ruby-on-rails-2

使用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风格,但这不起作用。

1 个答案:

答案 0 :(得分:0)

我不知道这种方法是否在第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