2012年8月31日金曜日

railsとmysqlのインデックス

インデックスを付与してみよう!ってことで…

migrateファイルにはこんなふうに書いて、 rake:migrate を実行
class AddIndex < ActiveRecord::Migration
  def change
    add_index :users, [:project_id, :login], :unique=>true, :name=>'users_project_login'
  end
end

uniqueをつけると、ユニークインデックス
name はインデックスの名前。指定しないと、
テーブル名_カラム名1_カラム名2_...カラム名N になります。

mysqlで実際どんなふうになているかを見る時のコマンドはこれ。
 show index from index;

ちなみにインデックスを外すときはmysqlでこれね。
migrate/rollbackしてるうちにデータがおかしくなった私(^^;
drop index index_name on tbl_name;

ユニークインデックスとは

「ユニークインデックス」と「ユニークじゃないインデックス(ノンユニークインデックス?)」の違いって?

あれこれ読んだ所、私なりの解釈としてはざっくりと・・・

ユニークインデックス
  指定したカラムの値は重複しない。(重複したデータ入れることができない)

ノンユニークインデックス
  重複したデータを入れることが可能。


また、インデックスには、複数のカラムの指定が可能。

これを理解した上で、railsに設定します!

テーブル行のしましま

Railsでテーブルの偶数・奇数行に異なる色を付けてシマシマにしたい場合
cycle が便利!
テーブルだけでなく、リストでも使えます。


View定義
<tr class="<%= cycle('even', 'odd')%>">
なお、cycleの引数は2つ以上取れます。例えば、red, yellow, blueにした場合は、3色が順になります。

CSS定義
.odd {background-color:#f6f7f8;}
.even {background-color: #fff;}

同じページで複数会cycle()を使うと、奇数行の場合にずれるので(奇数で終わると、次は偶数色から始まる)、その場合は、下記で一旦リセットする。
<% reset_cycle() %>


2012年8月30日木曜日

No route matches [GET] "/image

Rails で No route matches [GET] "/image ... なエラーが出ました。
画面にイメージを表示したいために、CSSに下記を記載してるのですが…。

Try1 (image以下の画像を表示!でも、上記のエラーが…。)
background-image: url(/images/sort_asc.png);

Try2 (あ、そうか、階層が違うか。 でもダメだった…)
background-image: url(../images/sort_asc.png);
Try3 (assetが必要? でもダメだった…)
background-image: url(/assets/images/sort_asc.png);
Try4 (もしや、ただ単に画像ファイル名だけ?Bingo!)
background-image: url(sort_asc.png);

これって、Rails3からなのかしら?

rails のlayout と 複数 yield と content_for

Railsのlayouotに複数yieldを埋め込みたい場合はどうすれば良いのでしょうか?

yieldに名前をつけてあげます。下記の例で言えば、:sidebar

<div id = "sidebar">
  <%= yield :sidebar %>
</div>

<div id="content">
  <%= yield %>
</div>

その際に、view側では、 content_for というタグを使って、
yield :sidebar のところに埋め込む部分を定義します。
例えば、partialでメニューを埋め込む場合はこんな感じ。
<% content_for :sidebar do %>
  <%= render(:partial => 'menu') %>
<% end %>

2012年8月7日火曜日

rubyの小数点計算

小数点の計算と小数点以下N桁の表示にハマったのでメモしておきます。
roundは引数が持てるんですね。

1.9.3p194 :001 > 1/3
 => 0
1.9.3p194 :002 > 1/3.to_f
 => 0.3333333333333333
1.9.3p194 :003 > (1/3.to_f).round
 => 0
1.9.3p194 :004 > (1/3.to_f).round(2)
 => 0.33
1.9.3p194 :005 > 1/4
 => 0
1.9.3p194 :006 > 1.to_f/4
 => 0.25
1.9.3p194 :007 > (1.to_f/4).round
 => 0
1.9.3p194 :008 > (1.to_f/4).round(1)
 => 0.3
1.9.3p194 :009 > (1.to_f/4).round(2)
 => 0.25