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

PDF
SignalRブートキャンプ
PDF
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
PDF
前衛地獄を生き残る
PPT
delayed_jobの自動再起動
PDF
PasteHub at kansai emacs 9th
PDF
continuatioN Linking
PDF
JavaScript MVC入門
PDF
SPA×Auth0
SignalRブートキャンプ
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
前衛地獄を生き残る
delayed_jobの自動再起動
PasteHub at kansai emacs 9th
continuatioN Linking
JavaScript MVC入門
SPA×Auth0

What's hot (13)

PDF
ざんねんなワークフロー図鑑
PDF
Predefを使ったsqlのトレース
PDF
dwangocpp1-lt
PDF
俺とDockerとtDiaryとkubernetes
PPTX
私が ASP.NET を選ぶ理由
PDF
Javaに這いよる.NET
PPTX
C# 9 のおすすめ新機能
PDF
Rubyボードハンズオンテキスト
PDF
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
PPT
RubyKaigi2011の雰囲気
PPTX
TypeScript 1.0 Released!
PDF
Android勉強会第二回-非同期処理-
PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
ざんねんなワークフロー図鑑
Predefを使ったsqlのトレース
dwangocpp1-lt
俺とDockerとtDiaryとkubernetes
私が ASP.NET を選ぶ理由
Javaに這いよる.NET
C# 9 のおすすめ新機能
Rubyボードハンズオンテキスト
Bacon.jsではじめる関数型リアアクティブプログラミング入門 with ES6
RubyKaigi2011の雰囲気
TypeScript 1.0 Released!
Android勉強会第二回-非同期処理-
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
Ad

Similar to Railsハイパー実践講座-第35回NaCl勉強会 (19)

PPTX
20100324 勉強会資料(ドメイン駆動)
PDF
Rails初心者レッスン lesson4 2edition
PDF
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
PDF
レガシーシステムのDBマイグレーションし始めた話
PPTX
Couch Db勉強会0623 by yssk22
PDF
Rubyな日々
PDF
20120831 mongoid
PDF
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
PDF
エンジニア勉強会_DECIDE
PDF
The Internal of Serverless Plugins
PDF
Ruby on Rails 入門
PDF
Rails composerでrails newを楽にしよう
PDF
そろそろRStudioの話
PPT
Start!! Ruby
PDF
20190828 sd by kitazaki_t0
PDF
Node.js を選ぶとき 選ばないとき
ODP
高トラフィックサイトをRailsで構築するためのTips基礎編
PDF
stripe-rubyで サブスクリプションを 実装して得た知見
PDF
Javaで1から10まで書いた話(sanitized)
20100324 勉強会資料(ドメイン駆動)
Rails初心者レッスン lesson4 2edition
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
レガシーシステムのDBマイグレーションし始めた話
Couch Db勉強会0623 by yssk22
Rubyな日々
20120831 mongoid
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
エンジニア勉強会_DECIDE
The Internal of Serverless Plugins
Ruby on Rails 入門
Rails composerでrails newを楽にしよう
そろそろRStudioの話
Start!! Ruby
20190828 sd by kitazaki_t0
Node.js を選ぶとき 選ばないとき
高トラフィックサイトをRailsで構築するためのTips基礎編
stripe-rubyで サブスクリプションを 実装して得た知見
Javaで1から10まで書いた話(sanitized)
Ad

More from Narihiro Nakamura (20)

PDF
PDF
PDF
Ruby's GC 20
PDF
桐島、Rubyやめるってよ
PDF
Rubyによる本気のGC
PDF
Fxxking gc.c
PDF
Parallel worlds of CRuby's GC
PDF
Parallel worlds of CRuby's GC
PDF
G1GCへ伸びていた「いばらの道」
PDF
CRubyGCの並列世界
PDF
円環の理(Garbage Collection)
PDF
地獄のGC本スピンオフ
PDF
シャイなRubyistがRubyKaigiでできること
PDF
われわれは、GCをX倍遅くできる
PDF
GCが止まらない
PDF
GC本をGCしないための100の方法
PDF
GC生誕50周年を祝って
PDF
GC本のツクリカタ
PDF
シャイなRubyistにできること
Ruby's GC 20
桐島、Rubyやめるってよ
Rubyによる本気のGC
Fxxking gc.c
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
G1GCへ伸びていた「いばらの道」
CRubyGCの並列世界
円環の理(Garbage Collection)
地獄のGC本スピンオフ
シャイなRubyistがRubyKaigiでできること
われわれは、GCをX倍遅くできる
GCが止まらない
GC本をGCしないための100の方法
GC生誕50周年を祝って
GC本のツクリカタ
シャイなRubyistにできること

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