RoR入門第6回
6回目。なかなか進まない。
呼び出すレイアウトを名自邸に指定するときはこうするらしい。
layout レイアウト名
script/consoleコマンドを使用すればコンソールから直接RoRで作成したクラス、設定等を利用できる。
ruby script/console
ActiveRecordにはフックスクリプトがたくさん用意されている。
validateもそのひとつ。
DELETE文の発効後に実行されるのはafter_destroyメソッド。
def after_destroy // DELETE文の発効後に実行する処理 end
トランザクションは例外が発生すれば中断してロールバックする。
ロールバックするだけで例外をトランザクションの外に伝達したくないときはActiveRecord::Rollback例外を投げる。
if 例外をトランザクションの外に伝達したい raise メッセージ else raise ActiveRecord::Rollback end
ActiveRecordで関連をたどる。
1親等の関連先 → 2親等の関連先の場合。
has_many :2親等の関連先, :through => :1親等の関連先
Builderライブラリを使用してXMLを生成する。
actionメソッド。
respond_to do |format| format.xml {render :layout => false} end
builderテンプレート。
xml.タグ名(:属性名 => 属性値) do xml.タグ名(タグ内容) end
ActiveRecordをXMLにする方法。
jsonにもできる。
respond_to do |format| format.xml {render :layout => false, :xml => モデル.to_xml(:include => XMLに含めるモデル)} end
Acceptヘッダを使用したレスポンス生成の分岐。
htmlとxmlのどちらが使われるかはAcceptヘッダでどちらが先に出てくるかで決まる。
明示的に".html" or ".xml"の拡張子を設定した場合はそちらが使用される。
respond_to do |format| format.html format.xml {render :layout => false} end
rdocの生成。
プロジェクトの概略的な情報はdoc/README_FOR_APPに記述する。
rake doc:app
国際化。
今はあまり関心のあるトピックでないのでさらっと流す。
言語別に用意した.ymlファイルに各言語のメッセージを書いてI18n.tメソッドでメッセージの名前を指定する("t"だけでもいいっぽい)。
.ymlファイル
en: layout: title: メッセージ
.erbファイル
<%= I18n.t 'layout.title' %>
通貨に関してもRailsは色々手を尽くしてくれる。
i18n_generatorsを使えば日本語の国際化を楽チンにできるらしい。
テスト。
テスト用データベースを用意。
rake db:test:prepare
テストコード。
class テストクラス名 < ActiveSupport::TestCase test "テスト名" do m = モデル.new assert m.valid? assert !m.errors.invalid?(:プロパティ名) assert_equal 予想値, m.プロパティ end end
実行。
ruby -I test テストコードのパス
テスト用のデータベースの用意とテスト実行のショートカット。
rake test:units
テストデータをDBに入れる。
テストデータはフィクスチャデータというようだ。
フィクスチャデータはテーブル名.ymlで記述する。
test_data: カラム名: 内容
フィクスチャデータの追加い方。
fixtures :テーブル名
通常はtest/test_helper.rbにfixtures :allが設定されている。