Rails勉強会@東京 第6回 初参加

http://wiki.fdiary.net/rails/?RailsMeetingTokyo-0006

OSCのときのRubyセッションで紹介されていて参加したいとは思いつつもタイミング合わず今回初めて参加できた。
楽しかったです:-)


参加セッションは前半が「Typoの改造」、後半が「Validation」

Typoの改造

  • Ruby-GetText-Packageを使用した国際化(I18n)
  • マルチユーザ対応


国際化についての話題が中心となった。


GNU gettextと同じフォーマット、似たような使い方だがGNU gettextに依存はしないので使いやすいよう。


詳しくは検証後、後日


自分用参考リンク

memo

Stringでの%の使い方

 "価格 %d円" % 100 => 価格 100円

sprintfのシンタックス・シュガーであるというのが面白かった

Validation

  • 標準のValidationの説明
  • 標準以外のValidationを行いたい場合の実装方法

APIリファレンスを元に一通りなめつつ、場合によってはソースに当たったりという感じ


その中でもポイントになりそうなのは、

  • validates_length_of (validates_size_of)
    • 1.1より前はバイト数のカウント
    • 1.1以降は文字数のカウント
      • RubyのString#sizeではバイト数が返るということで「実装どうやっているんだろう」と。正規表現を間にかませる*1ことで回避していた。
  • validates_numericality_of
    • デフォルトでは浮動小数
    • オプションの :only_integer => true で整数
      • nan も通る?(未検証)
      • でも、仕様をかためてvalidates_format_ofとかvalidates_inclusion_ofを使うべきか
  • validates_uniqueness_of
    • dbへアクセスしてユニークな値であることを検証
      • 確かにdbへアクセスしないとユニークであることを保証するのは厳しいけど....違和感があるのは自分だけじゃなかった:-)
  • validates_each
    • ブロックを使用して検証
validates_each :hoge do |record, attr, value|
  if value.....
    record.errors.add(attr, "#{value}")
  end
end

標準のValidation以外

model specificなら、validate()をoverrideして実装


よく使用するものはmoduleでプラグイン
ここで時間切れでした。

memo

  • validationのメッセージは「〜がおかしい」ではなく「〜してくれ」という文言にするのが良い
  • inclusion_ofでは allow_nil => true で、presence_ofも使うことでメッセージをきれいに制御できる

*1:正規表現はマルチバイト対応されている