バリデーションの動作確認
ActiveRecordが提供するバリデーション機能を見ていきましょう。
ActiveRecord::Baseを継承して作成されたModelクラスでは、クラス中でvaridates_*という名前のクラスメソッドにより、インスタンス属性値が適合しているべき検証条件を定義できます。
前回作成したHitokotoモデルでは、すでに1件のバリデーション条件が定義されています。ソースコード(hitokoto.rb)を確認してみましょう。[Railsエクスプローラー]ビューの[モデル]にあるHitokotoをダブルクリックして、編集エリアにhitokoto.rbを表示します。
ここで使用されているクラスメソッドvalidates_presence_ofでは、引数として渡された名前の属性値が存在していること(blankでないこと)を定義しています。従って、この例ではHitokotoインスタンスは、hitokotoという名前の属性値が存在することを必須条件としています。
ここで、3rdRailのRubyドキュメンテーション参照機能を使用して、validates_presence_ofのドキュメントも確認してみましょう。validates_presence_ofにカーソルを合わせ、ウィンドウ下部の[Rubyドキュメンテーション]タブをクリックすると、以下のようにActiveRecordソースコード中で記述されているコメントをリファレンスドキュメントとして参照できます。
さて、上記で設定されているバリデーション動作を確認するために、先ほどと同様にRailsコンソールを使ってバリデーションを実行してみましょう。以下のメソッドにより、hitokoto属性値のないHitokotoインスタンスを作成し、検証してみます。
>> h = Hitokoto.new => #<Hitokoto id: nil, hitokoto: nil, created_at: nil, updated_at: nil> >> h.valid? => false >> h.hitokoto = "Hello, ActiveRecord!" => "Hello, ActiveRecord!" >> h.valid? => true
ここで使用したメソッドvalid?は、ActiveRecord#Baseで定義されているものです。このメソッドを、上記のように作成したインスタンスに対して使用すると、バリデーション条件への適合状態が論理値で返されます。
なお、デフォルトではデータベースへの保存や更新を行う際も、上記のバリデーションが自動実行されます。以下で使用しているsaveメソッドはデータベースへの保存を行うためのメソッドですが、falseが返され、レコード保存に失敗している(正しく検証できている)ことが確認できます。
>> h = Hitokoto.new # Hitokotoインスタンスを作成し直す => #<Hitokoto id: nil, hitokoto: nil, created_at: nil, updated_at: nil> >> h.save => false >> h.hitokoto = "Hello, ActiveRecord!" => "Hello, ActiveRecord!" >> h.save => true
それでは、hitokoto属性値への検証条件を追加してみましょう。hitokoto.rbを編集し、バリデーションを追加してみます。
ここで、3rdRailが提供するコード補完候補機能を使ってみます。エディタ中で以下のようにvalidates_と入力したところで^+Space(Ctrlキーを押しながらスペースキー)を押してみましょう(^+Spaceは、Mac OS XのSpotlightへのショートカットが設定されている場合がありますので、必要に応じてキーバインドを変更してください)。
validates_length_ofメソッドを追加したいので、さらにlキー(小文字のエル)を押し候補を絞り込みます。validates_length_ofが選択されていることを確認したら、returnキーを押せばコード補完が完了します。
このように3rdRailでは、コード補完に^+Spaceを使用します。補完はメソッド名だけではなく、メソッドの引数や変数名の入力時にも有効です。定義済みのメソッドを素早く入力する際はもちろんですが、メソッドへの引数が思い出せないときなどに、とりあえず^+Spaceを押してみると、コーディングをスムーズに進めるための助けになるでしょう。
さて、ここでは、以下のようにvalidates_length_ofメソッドへの引数を設定します。
class Hitokoto < ActiveRecord::Base validates_presence_of :hitokoto validates_length_of :hitokoto, :maximum => 5 end
上記の例では、hitokoto属性値の文字列長の最大値が5であることを設定しています。Railsコンソールで再度確認してみましょう。
ソースコードを編集した後にRailsコンソールでの動作確認を行う場合は、コンソールの再起動が必要です。3rdRailのメニューから[ウィンドウ]−[Railsコンソール]の順にクリックし、[新規作成]から新しいRailsコンソールを起動してください。
起動したコンソールで、以下のメソッドにより追加したバリデーション機能の動作を確認してみます(実は、Railsコンソールなどのコンソールウィンドウでも、上記のコード補完機能は有効です。適当な個所で^+Spaceを試してみてください)。
>> h = Hitokoto.new => #<Hitokoto id: nil, hitokoto: nil, created_at: nil, updated_at: nil> >> h.hitokoto = "Hello, ActiveRecord!" => "Hello, ActiveRecord!" >> h.valid? => false >> h.hitokoto = "Hello" => "Hello" >> h.valid? => true
"Hello, ActiveRecord!"は文字列長が大きすぎるため、valid?に失敗していることが確認できました。
ActiveRecordのバリデーション機能では、ここで紹介したもの以外にも、文字列フォーマット条件や、検証を行う前提条件を与えることで、さまざまな検証条件を定義できます。詳しくはマニュアルや書籍などを参照してください。
2/3 |
Index | |
ActiveRecordが提供するModel機能を理解しよう | |
Page1 ActiveRecordが提供するModel機能 ファインダの動作確認 |
|
Page2 バリデーションの動作確認 |
|
Page3 アソシエーション マイグレーション |
3rdRailによるRailsプログラミング入門 |
Ruby/Rails関連記事 |
プログラミングは人生だ まつもと ゆきひろのコーディング天国 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる |
|
生産性を向上させるRuby向け統合開発環境カタログ Ruby on Rails 2.0も強力サポート 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる |
|
かんたんAjax開発をするためのRailsの基礎知識 Ruby on RailsのRJSでかんたんAjax開発(前編) 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう |
|
Praggerとnetpbmで作る画像→AA変換ツール Rubyを使って何か面白いものを作ってみよう! 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう |
|
コードリーディングを始めよう Railsコードリーディング〜scaffoldのその先へ〜(1) 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|