moosan63の日記、技術メモ

日記とか、技術メモとか

routes.rbのnamespaceが便利

routes.rbでnamespaceがすごい便利な事に気づいたのでメモ。

例えばルーティングで下記のように階層で分けるみたいなことをするとき

get "/users/hoge" => "users/hoge#index"
get "/users/fuga"  => "users/fuga#index"
get "/admins/hoge"=> "admins/hoge#index"
get "/admins/fuga" => "admins/fuga#index"

こうかける

namespace "users" do
  get "hoge" => "hoge#index"
  get "fuga"  => "fuga#index"
end

namespace "admins" do
  get "hoge" => "hoge#index"
  get "fuga"  => "fuga#index"
end

ちゃんとコントローラーはnamespaceに対応したところに置きましょう

app/controllers/users/hoge_controller.rb
app/controllers/users/fuga_controller.rb
app/controllers/admins/hoge_controller.rb
app/controllers/admins/fuga_controller.rb

もしすでに
app/controllers/以下にいろんなコントローラーがある状態で名前空間だけ変えたい場合は

scope "users" do
  get "hoge" => "hoge#index"
  get "fuga"  => "fuga#index"
end

とやると、よい。
( /users/hogeでhoge#indexが呼ばれる。users/hoge#indexではない。)
おわり

cssでheight 100%を作る

CSS書いててたまに、height:100%;がうまくいってなくて、コンテンツ量の少ないページでデザインが崩れてたり、逆にスクロールしたときに背景が途切れたりするときがあるのでそのためのメモ。

<html>
  <body>
     <div id="wrapper">
         .....

     </div><!--/ #wrapper -->
  </body>
</html>

みたいな感じでHTMLを書いて。

html,body{
  height:100%;
}

div#wrapper{
  min-height:100%;
}

CSSをこんなかんじに定義する。
#wrapperのheightをmin-heightで指定するのがポイント。
min-heightはIE6では使えないのでそれに関してはまた別のハックが必要。

cssのclassによく定義しておくもの

floatで

.left {
  float:left;
}

.right {
  float:right;
}

って、定義しておくと

<div>
  <h2>ほげ</h2>
  <ul>
    <li class="left">list1</li>
    <li class="right">list2</li>
  </ul>
</div>

って指定するとfloatできるようになるので、ぱっと見どれがfloat指定されてるのかわかりやすくなっていいと思います。

あと、floatやるならclearfixも忘れずに・・

.clearfix:after {
    content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
}

追記(2012/10/12)
個人的にはセレクタに定義して使いまわすのがカッコイイと思っていたが、
親要素にclearfixのものを定義するほうが良いらしい・・・。
ただ、直接書いているとやはり効率がワルイしプログラマ的にはなんか気持ち悪いので、
sassやlessなどを使ってclear fix部分をimportして使うのがいいのかなあと思いました。