2011-03-21 5 views
0

Rails 2.3.5カスタム検証メッセージに保存されているアクティブレコードオブジェクトのフィールド値を使用していますか?

これが可能かどうかを調べるのに問題があります(Googleは今夜私の友人ではありません)。私はこの検証(@ product.save用)を持っています:

validates_uniqueness_of :product_name, :scope => [:category, :catalog_id], :message => "..." 

カテゴリを明確にするエラーメッセージを希望します。同様に、言う:この場合のカテゴリは「靴」です。私がしたい何

エラーを持っていることですが言う:

"There is already a shoes product in this catalog with the same name." 

は、例えば、私が試した:

:message => "There is already a #{:category} product in this catalog with the same name." 

(結果:「カテゴリの製品が、この中に既に存在し同じ名前のカタログ。」)

:message => "There is already a #{@product.catalog} product in this catalog with the same name." 

(結果:ゼロ・エラー)

答えて

1

てみてください(テストし、それらのいずれかが動作するはずではない):

:message => "There is already a %{category} product ..." 
:message => "There is already a %{value} product ..." 
:message => "There is already a %{attribute} product ..." 

問題が解決しない場合は、(例えばconfig/locales/en.yml)翻訳ファイルにメッセージを移動すると、メッセージを受け取るためにt()を使用してください。

+0

:message =>「既に%{value}製品があります...」は動作するはずです。 – mnelson

1

検証メッセージは、デフォルトで補間をサポートするI18nAPIを使用します。

しかし、それはバリデーターによって渡された値だけを補間することができるので、それを行うための唯一の方法は、UniquenessValidatorをハッキングしてオプションとして渡すことです。

+0

ええ、私は、メッセージ内にClassインスタンス変数を挿入する運がありませんでした。もちろん、私が試していたような特定のものは、(同じカテゴリの別の製品が既にこのカタログに同じ名前で存在していると思うほど十分にスマートではないと仮定して)ユーザーを恩恵を受けることだけです。ありがとう! – Reno

関連する問題