Rails設定オプションチートシート
Gluttonous: Configuring Rails Environments: The Cheat Sheet
http://glu.ttono.us/articles/2006/05/22/configuring-rails-environments-the-cheat-sheet
が便利。
environment.rbで設定するようなRailsのオプションが一覧できます。
誰か日本語に…(ry
第17章 ActionViewを読む
テンプレート
場所
どこにテンプレートファイルを置くかをtemplate_rootオプションで決めることが出来る。標準では"app/view/"以下。
- render() : 明示的にテンプレートファイルを指定することも出来る
- :action
- :template
- :file : アプリ間で共有するときに便利らしい。
動作環境
次の変数がテンプレート内で使える
- controller : テンプレート呼び出しもとのコントローラオブジェクト
- base_path : テンプレートのベースディレクトリ
他にもいろいろあるがデバッグ時以外はそれらを使うのは非推奨。
Builderテンプレート
XMLを生成するライブラリ。gemsから単独のライブラリとしても使える。XML風言語を生成する際には非常に使えそう。
使い方としてはこんな感じに出来る。
xml.html do xml.head do xml.title do end end xml.body do end end
メソッド名が<メソッド名>に変換される模様。
Railsではテンプレートファイル拡張子をrxmlとしておくと自動的にこれで処理される。
RHTMLテンプレート
ERBで処理される。テンプレートファイル拡張子はrhtml。
- <% 〜 %>: 改行あり
- <% 〜 -%>: 改行なし
ERBなので何でも出来るが、テンプレートにコードを入り込ませないためになるべくヘルパーを使う。
ヘルパー
XxxxControllerに対して、app/helpers/xxxx_helper.rbのXxxxHelperが対応する。
アプリ全体に適用されるヘルパーはapplication_helper.rbにメソッドを書く。
複数のコントローラ間でhelperを共有したいがアプリ全体にはしたくない場合、対象コントローラでhelper宣言を行なう。
ヘルパーメソッド
Railsに元々用意されているヘルパーメソッドは大量にあるため、一部のみ抜粋する。
リンク作成のヘルパー
- link_to("text", {:action, :controller }, {:id, :class, :confirm})
- :confirmはリンク移動する前にJavascriptでメッセージを警告する際のメッセージを入れる。
- buttom_to : 機能的にはlink_toと同じだが、独立したフォームでボタンを押して移動するリンクを作成する。副作用のあるリンクに使えとのこと。
- link_to_unless_current : 後で書く部分テンプレートなどで非常に使えそう。
- auto_discovery_link_tag : 独自に拡張したり出来るのかな?
フォームのヘルパー
- form_tag
- :multipart : ファイルのアップロードをするフォームを作成するときに使う
- text_field
- hidden_field
- password_field
- :variable
- :attribute
- options
- :size
- :maxsize
- text_area
- :cols
- :rows
- radio_button
- :variable
- :attribute
- tag_value
- options
部分テンプレート
Webサイトを作っていると同じようなところの使い回しが非常に多いのでこの機能は非常に助かる。
テンプレートファイルは"_"からはじまるもので、Rubyの変数名となりうるものでないとならない。
テンプレートファイルからrender(:partial => 部分テンプレート)を呼び出すことで使える。
かなり駆け足だったが、Rails本で一番肝となる部分は終わったのではないかと思う。これ以上は実際に何か作りながら参照した方がよさそうだ。
そういえば、今日はtypoっぽいところを2箇所ぐらい発見した。今日は冴えてるような気がする。*1
p.340の真ん中辺り
「コントローラオブジェクトのheaders、params、reques、response、…」は「コントローラオブジェクトのheaders、params、request、response、…」っぽい。(ちゃんと調べてないけど)
p.348の真ん中辺り
「<%=number_with_delimiter(12345678, delimiter = "_") %>」は「<%=number_with_delimiter(12345678, :delimiter => "_") %>」のような気がする。
ということで公式サポートページに登録しておいた。
http://awdwr.shugo.net/errata
*1:いつもなら見逃してるような気もする
第16章 ActionController
ルーティング
サーバーにURLがリクエストされたとき、そのリクエストをどのコントローラーのどのアクションに割り振るかの設定。つまるところmod_rewrite見たいな感じ。config/route.rbで設定する。
- map.connect : このメソッドでルーティングを設定する。
- :default => { :name => "value" }
- :requirements => { :name => /regexp/ }
- :name => value
- :name => /regexp/
URLの生成
- url_for :URLの生成を行なう。RailsにURLを格納するときはすべてこのメソッドを通して作成する。(一部のメソッドでは内部的に使われている)
- :controller
- :action
- default_url_options : コントローラにこのメソッドを作成することによりパラメータのデフォルト値を設定することが出来る。
- :anchor
- :host
- :only_path
- :protocol : "https"
- :trailing_slash : 末尾にスラッシュをつけるか否か
- xxx_url : ルーティングのところで作成したルーティング名が自動的にxxxを置き換えたメソッドを作成する。頻繁にアクセスするURLなどにはこれを使う
コントローラーの環境
コントローラで使える変数など。
- request
- domain()
- remote_jp()
- env()
- method()
- :delete
- :get
- :head
- :post
- :put
- delete?
- get?
- head?
- post?
- put?
- params
- cookies
- response
- session
- headers
レンダリング
リクエストに対するサーバーのレスポンスは3種類あって、
- テンプレートを処理してレンダリングした結果を返す
- 文字列を返す
- データストリームを返す
があるそうな。
レンダリングのテンプレートには2種類あって、rhtmlというやつとbuilderという奴があるらしい。標準はrhtmlでERBを使ったテンプレート。
- render() : テンプレートファイルなどを指定するメソッド。
- :text
- :inline
- :type : "rhtml" or "rxml"
- :action
- :file
- :template : ex. "controller_name/action_name"
- :partial
- :status
- :layout
- send_data() : データストリームを返す
- send_file() : ファイルを返す。send_data()との挙動の違いが分からない。(ストリーミングが出来るか否か?)
- :filename
- :type
- :disposition : "inline" or "attachment"
セッション
コントローラの先頭か、app/controllers/apprication.rbで宣言。
セッションの設定
- ActionController::Base.session_options[]
- :session_domain
- :session_id
- :session_key
- :session_path
- :session_secure
フィルタ
ActiveRecordのコールバックと似たような感じ。レンダリングする前後で処理を行なわせることが出来る。コントローラーを継承すればフィルタも継承されるというのがすごいと思った。
- before_filter
- after_filter
- :only
- :except
- around_filter : 他のやつとは使い方が違うので注意。before()、after()を定義する。
- verify() : わざわざフィルタメソッドを定義しなくても頻出する処理はこれで処理できる。
- :only
- :except
- :flash
- :method
- :params
- :session
- :add_flash
- :redirect_to
キャッシュ
ここを適切に設定することでサーバーの負荷が大幅に変わってきそう。キャッシュには3種類ある。
- ページキャッシュ : 静的なHTMLを用意するため一番効果が高い
- cache_page
- expire_page
- アクションキャッシュ
- caches_action
- expire_action
- フラグメントキャッシュ
スイーパ
各コントローラにキャッシュの処理を書くと分散してしまうのでスイーパクラスを作ることでまとめて記述できる。ActionController::Caching::Sweeperクラスを継承し、「observer モデル名」で監視対象のモデルを書く。コントローラー側にはcache_sweeperを書く。
今まで何をやらせれば良いかわからなかったControllerの仕事が分かったような気がする。本って素晴らしい!!
第14・15章 ActiveRecord
Rails本の勉強メモを書いていきます。
テーブルとモデルの命名規則
テーブル名がモデル名を小文字にして複数形にするという命名規則を無効にするときは、environments.rbでActiveRecord::Base::pluralize_table_namesをfalseにしてしまえばよいらしい。
一時的に変更する場合はモデル側で、
class Model < ActiveRecord::Base set_table_name :model end
といった感じにするらしい。
Boolなデータ
テーブルにBool値を格納する場合、RailsはDBによって様々なようなので、0, "0", "f", "false", "", nilをfalseと判断するらしい。
主キー
Railsでは主キーはidにしておくのが無難。元々idがないテーブルを利用したいときに
class Model < ActiveRecord::Base set_primary_key "keyname" end
とすることは出来るそうだけど、参照は出来ても書き込みは保証しないとか何とか書いてあったような…。
データベースへの接続
Railsとしては特に弄らなそうだけど、ライブラリとしてActiveRecordを使う際には重要そうなところ。
CRUD
Create
コンストラクタはブロックもハッシュも取ることが出来る。オブジェクトを作ったと同時にデータベースに保存したければcreateを使う方がsaveのし忘れがなくて良さそう。
Read
基本的にはfindメソッドで行なう。findメソッドはパラメーターの渡し方によって挙動がかなり違ってややこしい。
- find(id): idに該当するレコードがなければRecordNotFound例外が発生する。
- find(:first, ...): 最初の一つのレコードを返す
- find(:all, ...): 見つかったすべてのレコードを配列で返す
- :conditions : SQLのwhere句に相当する部分条件を指定する
- :order : 並び順、詳しい指定の仕方は書いてなかった気がする。
- :limit : :allのときに使う。いくつまで取ってくるか。
- find_by_xxxxやfind_all_by_xxxxでも検索できる。
Validation
データのバリデーションはモデルに定義しておけば良いらしい。いろいろなメソッドが用意されてるのだけど、非常に名前が長い気がする。。。もっと短い名前のaliasがほしいと思った。これだけ長いとバリデーション云々の前にtypoする気もする。
メソッドならまだaliasのしようがあるから良いけれど、ハッシュパラメータ*1はaliasが効かないから長いのはつらいような気がする。
(個人的に)よく使いそうなやつを抜き出すと、
- validates_length_of
- :is
- :minimum
- :maximum
- validates_numericality_of
- validates_presence_of
といった感じかな。
コールバック
コールバックは素晴らしいと思った。これにメソッドとかを指定しておけば適切なタイミングで処理を行なってくれるというもの。
いくつかの語彙で整理すると覚えやすそう。
- validation : beforeのみ。
- create
- save
- update
- destroy
この語彙とbefore、afterのタイミングで行なえて、その詳しい順番はP.278の図15.4が参考になる。
after_findとafter_initializeはパフォーマンスの関係で使う場合には別途定義する必要があるそうな。
テーブル間の関係(has_many, ...)とか辺りは経験不足のためよく分からなかった。
*1:勝手に造語。引数にハッシュを渡してパラメータとするようなメソッドのことです
RailsによるアジャイルWebアプリケーション開発
- 作者: 前田修吾
- 出版社/メーカー: オーム社
- 発売日: 2006/02/25
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 109回
- この商品を含むブログ (211件) を見る
買った。