ひげろぐ

技術者として仕事人としての思うところや覚え書きやらです
Home      Profile      Works     
2007-10-18

フラッシュを使いこなす – flash, flash.now, flash.keep

Railsに触ってからすでに1年以上が経過するが、放置期間も長かったので割と初心者ぽいことを知らなかったりする。
なんかここらでしっかり復習しておかないとやばい気がしている今日この頃。

といったところでいろいろと基本的なこともあえて書いてみる。
書くのは一番の勉強だしね。

フラッシュとはなんだろう

端的に言うとあるリクエスト間と次のリクエストの間でのみ保持されるセッション変数。
リクエストAで定義されて次のリクエストBが終わると削除されるので、セッション変数削除し忘れてウボァーということがないのが利点。

主にエラーメッセージなどを表示するのに使う。
コントローラ内で次のようにハッシュっぽく使える。

 flash[:notice] = "hogehoge"

これをビューではよく次のように表示する。

<%= flash[:notice] if flash[:notice] %>

または

<% if flash[:notice] %>
<div id="notice">
  <%= flash[:notice] %>
</div>
<% end %>

みたいにしてスタイル当てて強調表示したりとか。

あるアクションでユーザーからの入力を処理して、その結果を他のアクションにちょっとしたメッセージで表示したいということは相当あるので、こういう仕組みがあらかじめあるのはありがたい。
とにかく自前でやるとよく消し忘れたりするので。

単にエラーメッセージを保持するものとして覚えている人がいそうなフラッシュだが、機能としてflash.now、flash.keepなどもあるので把握しておくと吉。

flash

フラッシュとしてはスタンダードな次のリクエストまで有効なフラッシュ。

動作サンプルとして以下のアクションを適当なコントローラに定義して実行。
リロードを続けると2回リロードにつき1回フラッシュメッセージの内容が更新されることがわかる。

def flash_test
    flash[:notice] = Time.now unless flash[:notice]
    render(:inline => "#{flash[:notice]}")
end

本来的には次のような他のアクションへのリダイレクトを行うアクションで使うはず。

def create
    ...(何かの処理)...
    flash[:notice] = "hogehoge"
    redirect_to(:action => 'result')
end

flash.now

そのアクションでだけ有効なフラッシュメッセージ。

以下のアクションをリロードし続けると毎回フラッシュメッセージの内容が更新される。

def flash_now_test
    flash.now[:notice] = Time.now unless flash[:notice]
    render(:inline => "#{flash[:notice]}")
end

これは普通にインスタンス変数を使っても同じ事なのだが、エラーメッセージ系はフラッシュで一貫して処理した方がスッキリとかそういうことなんだろう。きっと。
確かにそれは正しい気がする。

flash.keep

消えるはずのフラッシュメッセージの内容を保持し続ける。

以下のアクションをリロードし続けてもフラッシュメッセージの内容はいつまでも変わらない。

def flash_keep_test
    flash[:notice] = Time.now unless flash[:notice]
    flash.keep(:notice) if flash[:notice]
    render(:inline => "#{flash[:notice]}")
end

引数なしでflash.keepを呼ぶと現在のフラッシュの内容がすべてkeepされる。

@flashはもう使えません

flashは古いドキュメントでは@flashになっているが、これはDeprecationなのでRails 2.0からは使えなくなる。
今はまだ使えるけどそいうわけなのでご注意を。

近況

二泊三日で信越方面にツーリングに行ってきました。
最近夜更かしして朝遅く起きるという生活リズムになっていたのだけれど、旅に出ると朝早く起きて夜早く寝る生活にリセットされていい感じです。

2007-10-05

ActiveRecordおさらい その壱 テーブル周りの規約

Railsおさらいシリーズ。
忘れてること多々なので書いて思い出そうという趣旨です。

ActiveRecordの前提

テーブルとモデルクラスが1対1で対応するO/Rマッパー。
テーブルの構造に関しては以下の規約が基本。

  • 主キーがオートナンバー型が必須
  • 主キーのカラム名はidがデフォルト
  • テーブル名は複数形がデフォルト
  • テーブル名はモデルクラス名を小文字アンダースコア区切りにしたものがデフォルト

主キーがオートナンバー型必須なのはマスタデータのIDを任意に設定したいときにちょっとやりにくかったりする。
主キーのカラム名とテーブル名に関しては変更可能だが、必要がなければ規約に従ったほうが絶対幸せになれる。

主キーとテーブル名を変更する

どうしても変更したい場合はモデルクラスの中で以下のメソッドを使って変更できる。

  • set_primary_key(column_name)
  • set_table_name(table_name)
class HogeModel < ActiveRecord::Base
  set_primary_key :code
  set_table_name  :hoges
end

その昔は私もcode派でした。

テーブル名の複数型をやめたい

全体的にテーブル名の複数形を止めたい場合は、pluralize_table_names属性の値をfalseにするとできる。
個々のモデルでset_table_nameしても実現できるが、テーブルが多すぎてめんどくさい場合になど使うと便利っぽい。

参考

Ruby on Rails入門―優しいRailsの育て方

Ruby on Rails入門―優しいRailsの育て方

posted with amazlet on 07.10.06

西 和則
秀和システム (2006/08)
売り上げランキング: 45695

おすすめ度の平均: 4.5

3 これは入門書ではありません。
3 入門用としては残念。
5 Railsスタートのベストチョイス

素敵な本だけど、入門用としては濃すぎる気がする。

近況

その日布団にはいるまで一日は終わらないんだ。
日付をこの日にするためにタイムスタンプちょっと戻したけどセーフってことで。ひとつ。

copyright brass.to | powered by WordPress ME