0

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'.

機能を無効にする方法、またはこれらの値をエスケープする方法を知りたいです。sprintf スタイルにエスケープしようと%sしまし%%sたが、うまくいきません。

4

1 に答える 1

0

この方法が rals 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
于 2012-09-10T01:48:02.127 に答える