Rails 4.2のこの動作が何であるか、非常に興味があり、私の質問に対する答えを見つけることができませんでした。どちらが優先されますか:Railsの型キャストまたは検証ですか?
すべての時間属性についてモデルに検証を追加します。数値文字列ではなく、整数だけを受け入れるようにしたい。この属性のスキーマ内のデータ型は整数です。私はそのような検証をしています:
RANGE = 0..59
validates :start_minute, inclusion: { in: RANGE }, numericality: true
私はこれらの他のバリデーションも試みました。私は同じ結果を得る。
validates_numericality_of :start_minute, inclusion: { 0..59, only_integer: true }
validates :start_minute, inclusion: { in: 0..59 }, numericality: { only_integer: true }
私は、要求仕様から私のコントローラに自分のparamsを渡す、start_minute
は"12"
です。しかし、作成したオブジェクトを見ると、start_minute
は12
です。 this article by ThoughtBotによると
:
「それはデータベーススキーマと一致するようにアクティブレコードが自動的に入力するためですが、すべての入力をキャスト種類に応じて、これは非常に単純で、または非常に複雑です。」
オブジェクトを作成できませんか?型キャスティングは私の検証より優先されますか?または、私の検証に何か問題がありますか?私はここで何が起こっているのかを判断できなかったので、これに対する洞察を感謝します。私もこのためのモデル仕様を作成して、私はまだ数字の文字列で新しいオブジェクトを作成することができます。
ご連絡ありがとうございます。私はまだフードの下でRailsの魔法を学んでいます。それが言うrails docsから
HTMLのフォームは入力されないため、ユーザー入力は文字列ではありません。 – max