SlideShare a Scribd company logo
Railsハイパー実践講座
                           第35回NaCl勉強会

                             中村 成洋
                          ネットワーク応用通信研究所




Powered by Rabbit 0.6.2
今日お話しすること
 細かすぎて本には書かれていない内容
 ハイパーでアチョーな実践的なテクニック
 来年には使えないテクニック多数
 Tips22連発
 適宜ツッコミ歓迎




                       1/27
jsはprototype.jsを使うこと
  jqueryに対応していない
  Rails3だと切り替えられるらしいとの風の噂




                            2/27
fixtureは使うな
  必ず破綻します
  machinistやfactory_girlを最初から導入するこ
  とを強くお勧め
    ただし、小さいアプリでは気にする必要はない

  画像アップロードのテストがしづらい
  marsでは手動テスト用のテストデータとして
  fixtureを利用


                                 3/27
mock,stubライブラリを使え(た
だし適材適所)
 ところ構わず使わないこと
 ここをだましたいって時に使うべし
  グローバルな情報を修正したい場合。
  例:クラス内のメソッド書き換え、Time.nowの値を変え
  たいとか

 mock,stubの違いは自分で調べるべし


                             4/27
マスタデータのロードには
seed.rbを使う
 rake db:setup の際に呼ばれる
 DBマスターデータ等々、アプリケーションに必要
 なデータはここで読ませると良い




                         5/27
STIはロードではまる
 STIはテーブルが存在しないクラスができてしま
 う
 requireを書いた方が良いかも(要確認ですが)




                         6/27
ポリモーフィックアソシエーショ
ンはソートではまる
 ソート画面があったら注意
 STIの方が好ましい
 ポリモーフィックアソシエーションだと処理が煩雑
 になる




                       7/27
プロジェクト専用のscaffoldを
作るべし
 コントローラや、viewがある程度似てくる
 共通化は出来ない程度
 ミスの大量生産に注意




                         8/27
確認画面でセッションは使うな
 色々とはまる
 いつクリアする?とかとか




                9/27
polymorphic_urlを使え
  STIやポリモーフィックアソシエーションでコント
  ローラのURLが変わってしまうとき
  意外と知らない人が多い




                         10/27
g,nをデバッグ時に使う
 Macなら g
 Linuxなら n




               11/27
困ったらrailsのソースコードを
引くこと
 すぐ引けるようにしておくことが大事
 gemも同様




                     12/27
attr_accessible,
attr_protectedを忘れずに
  :user_id, :xxx_id には attr_protected しておい
  た方がセキュア
  まあ、そういう使い方をコントローラでしなければ
  問題ないけど




                                      13/27
boolean型の名付け方
 is_xxx は辞めよう
 usable みたいなのがいい
 モデルにはusable?メソッドが自動で定義される




                        14/27
gemのバージョンは絶対指定し
ろ
 environment.rbに必要なgem記述
   絶対バージョン指定する

 不意にバーションが上がって最悪の自体
 どのバージョンを使っているかわからなくなる




                           15/27
レコードは親、子供の順でセー
ブする
 Railsの仕組み上、そうできている




                      16/27
親、子供を一つのアクションで
保存するときは auto_save を
使え
 has_many :xxx, :auto_save => true
 親が保存されると子供も保存される
 valid? の時に子供に対して valid? が届く
 この際に validates_association は使わないこ
 と

                                     17/27
accepts_nested_attributes_f
orを使うべし
  便利




                        18/27
count,size,lengthの違いは常
に意識して
  件数のみ取得したい
   size
      カウンタキャッシュの使用
      すべてロード済みの場合、配列の個数。駄目な
      場合、SQLのCOUNT文。ロードはしない。
   count
      ロード済みでもSQLのcount文を発行する。ロー
      ドはしない。(件数の後、色々操作したい)

                            19/27
count,size,lengthの違いは常
に意識して
  件数取得後、色々と操作
   length
   DBからロード済みであれば配列の件数、なければDB
   から実際にロードする
   子要素の中身をその後使用する際に使う。




                          20/27
counter_cacheの使い所
 子レコード数でソートするときなんかに使う
 それ以外は全く使う必要なんかない
 親を先にセーブしとかないと駄目
 条件も指定できない(これはとんでもなく酷い)
   カラム名を規則に合わせて、自分でカウントアップ、ダウ
   ン処理を作ることで回避




                           21/27
form_forのpost,put
  @xxx が new_record? だと自動的にpostにな
  る
  それ以外は put
  アレ、正しいアクションに飛ばない?って時は大体
  コレを疑う




                               22/27
rvmの勧め
 通常のrubyスクリプトはパッケージの物を使いた
 い(当然!)
   他のパッケージとの兼ね合いもあるしね

 patch-levelは上がっていく
   その版の最新のものを使いたい

 project毎の .rvmrc !!



                        23/27
お勧めplugin,gem
 ruby-toolboxを見るべし
   http://ruby-toolbox.com/




                              24/27
enum_columnプラグインの紹
介(拙作)
 フラグを扱いたい
  例 :publiced, :private, :member_only
  けどテーブルにするまでもない




                                        25/27
実例
おわり

More Related Content

Railsハイパー実践講座-第35回NaCl勉強会