0

カスタムの非 ActiveRecord モデル (いくつかの属性を持つ単純なクラス) の配列で構成されるシリアル化されたフィールドを含む ActiveRecord モデルがあります。

シリアル化された各アイテムの人口と検証を親モデルと一緒に統合する方法を見つけようとしていますが、そうするためのエレガントな方法を見つけることができません。

シリアル化されたモデルの「initialize」メソッドは、「属性」ハッシュを受け取り、それらをクラス属性に入力するだけです。これは問題ありませんが、フォームからデータを受け取るとき、データは実際の型ではなく文字列データとして受け取られます。ActiveRecord モデルはこれを処理する方法を認識しており、モデル インスタンスがデータベースに保存される前に、スキーマに基づいて型キャストを行います。AR モデルに似た動作にするために (「初期化」メソッドでの型キャスト以外に) できることはありますか?

また、非 AR モデルの検証に「Validatable」gem を使用しようとしていますが、「validates_numericality_of」を使用して数値が 0 より大きいことを定義する場合のように、そこで定義できない検証があるようです。

それに渡すことができる「if」パラメーターがありますが、数値チェックの前と実行時に発生します。

validates_numericality_of :price, :if => lambda { self.price >= 0.0 }, :message => "Price must be greater or equal to 0"

「価格」フィールド内に文字列を入力した場合、モデルが有効かどうかを確認しようとすると、「価格」は文字列であり、それを数値と比較しようとしているため、例外がスローされます...

1 つのスレッドで 2 つの質問をしましたが、それらは関連しています。

ありがとう

4

1 に答える 1

0

試しましたself.price.to_iか?

于 2012-05-09T15:13:25.150 に答える