前回 は Scaffold を利用して Post の雛形を作成しました。今回は Model の中身を見て、バリデーションの基本を学び、コンソールで Model の動作を確認する方法について見ていきたいと思います。
6.4 Model
Post の Model を見てみましょう。app/models/post.rb は実にシンプルな内容です。
1 2 3 |
|
本文を読み進める前に、コードを見て気になった事があります。ActiveRecord::Base
は置いておくとして、属性のアクセスを定義するクラスメソッドは attr_accessor
ではなくて、attr_accessible
となっていますね。Railsのattr_accessible設定について - チュパカブラの勉強日記 によると attr_accessible
は Rails 独自の設定で、属性をセキュアに更新する仕組みのようです。
ActiveRecord::Base
を継承していることに注目してください。ActiveRecord は非常に多くの機能を、ユーザーが実装する Rails Model クラスに無料で提供しています。例えば、基本的なデータベースの CRUD(Create, Read, Update, Destroy)操作、データ妥当性チェック、同様に洗練された検索のサポートおよびお互いに複数のモデルを関連付けを可能にすることを含みます。このファイルで他に重要な部分は、attr_accessible
です。これは(例えば、update_attributes
経由で)一括で更新する事が許可されている属性のホワイトリストを指定します。つまり、これは attr_accessible
で指定した属性のみ Rails 上でアクセスできるということ意味しています。
6.5 バリデーションを追加する
Rails はモデルに送信されるデータの妥当性チェックを補助するメソッドを含みます。Post クラスにバリデーションを追加してみましょう。app/models/post.rb を開いて、以下のように編集します。
1 2 3 4 5 6 7 |
|
これらの変更はすべての Post が name と title を値を含み(空ではない)、かつ title が少なくとも5文字以上の長さである事を保障するでしょう。Rails はモデル内の様々な状態-存在、カラムの一意性、書式および関連オブジェクトの存在-をチェックすることができます。バリデーションについては Active Record Validations and Callbacks で詳しい情報が記載されています。
6.6 コンソールを使用する
実際にバリデーションの動作を見るために、コンソールを使用する事ができます。コンソールはコマンドラインツールでアプリケーションのコンテキストに沿った Ruby のコードを実行することができます。
デフォルトのコンソールはデータベースを変更してしまうので、代わりに rails console --sandbox
コマンドを使用して、どのような変更を加えてもロールバックできるようにします。
コンソールが読み込まれた後に、Model で作業し使用する事ができます。 実際にコンソールを起動してみます。コンソールは入力と出力結果がわかりやすいように改行を加えてあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
上記の実行結果が示すのは、新しい Post のインスタンスを作成し、それを保存しようと試みて、その戻り値として false が返り(保存が失敗したことを示しています)、そして、Post の errors の中身を検査しているということです。
一通り操作が終われば、exit
と入力してコンソールを終了します。
development Web サーバーとは違い、コンソールはそれぞれの行毎に自動的にコードを新たに読み込みません。コンソールを開いている間に、(エディタで) Model を変更させたい場合には、reload!
とコンソールのプロンプト上で入力すると、Model の変更が読み込まれます。
今回のまとめは、以下の通りです。
- Model の中身を見て、
ActiveRecord::Base
を継承していることを確認した - Model の属性にアクセスするために
attr_accessible
を定義していることを確認した - Model にバリデーションを追加した
rails console --sandbox
でコンソールを実行し、exit
でロールバックを行い終了した
切りがいいので、次回 に続きます。