xxx_pathからurlを取りたい

通常使ってたらあんまりないのかもしれないけど。

libとかでxxx _path(rake routesで一番左にでるやつ)のurlを取りたいとき。

1
Rails.application.routes.url_helpers.xxx_path(@user)

で取れる。

1
Rails.application.routes.url_helpers.user_register_shop_staffs_path(shop) # => "/shops/1/staffs/user_register"

jpmobileでredirect_toした時にflashが取得できない

軽くはまった。

rails 3.0.5
jpmobile 1.0.0

最初にアクセスしたコントローラで、flashを設定しつつredirect _toしたらflashから値が取り出せなかった。

flashはsession使っているから、初回のみsession作ってあげる必要があったみたい。


配列の配列をループするときとか

個数分受けとればいい。
勝手に展開してくれる。

1
2
array = [["1a","1b"],["2a","2b"]]
array.map{|a1,a2| a1 + a2} # => ["1a1b", "2a2b"]

injectとかと併用する場合は括弧で囲う。
以下は連想配列に変換する例

1
2
array = [["1a","1b"],["2a","2b"]]
array.inject(Hash.new){|hash,(param1,param2)| hash[(param1)] = param2; hash } # => {"1a"=>"1b", "2a"=>"2b"}

いいですね。Happyになりますね。


each_with_indexの開始を任意の数値から

each with indexは0始まりでインデックスが使える。

1
["a","b"].each_with_index{|elem,i| puts i} #=> 0 1

でも連番降ったりとか1始まりが欲しい場合がある。
そんな場合。

1
["a","b"].each.with_index(1){|elem,i| puts i} #=> 1 2

もちろん数値変えればスタートの値も変わる。


rails console

rails consoleで

1
ActiveRecord::Base.logger = Logger.new(STDOUT)

って書くとSQLが吐かれるようになります。

1
2
User.first
User Load (0.1ms)  SELECT `users`.* FROM `users` WHERE (users.deleted_at IS NULL) LIMIT 1


2012年4月2日追記。

whereつけると戻り値がrelationになるから、to _sqlが使える。
scoped使うとrelation取れる。

1
User.unscoped.to_sql #=> "SELECT `users`.* FROM `users`"

アソシエーション参照時のrailsで発行されるSQLを取得

まぁ、ログ見りゃいいんだけど。デバッグで止めてちょっとずつ条件変えながらSQL見たい時とかデフォルトスコープを確認したいけどモデル見るの面倒な時とか。

環境は引き続き
ruby 1.9.2
rails 3.0.5

まず、ActiveRecordにto _sqlってのがあります。
これ使うとSQL文を確認できる。

ちなみにモデルにはact as paranoid使ってdestroyは全て論理削除状態。
デフォルトのスコープでdeleted _at is nullの条件がつく状態。

1
User.where("created_at > ?",Date.yesterday).to_sql # => "SELECT `users`.* FROM `users` WHERE (users.deleted_at IS NULL) AND (created_at > '2012-03-08')"

whereの後に使えば、とりあえずは使えるみたい。
んでuserクラスにimagesがhas _manyで宣言されている場合。

1
2
user = User.find(1)
user.images.to_sql #=> NoMethodError: undefined method `to_sql'

whereを付ければto _sql使えたのでwhereつける。

1
user.images.where("").to_sql #=> "SELECT `user_images`.* FROM `user_images` WHERE (user_images.deleted_at IS NULL) AND (`user_images`.user_id = 1) ORDER BY position ASC, `sequence` ASC"

とれた。


radio_button_tagとradio_button

なんかよくわからん。

環境は引き続き
ruby 1.9.2
rails 3.0.5

まずはradio button tag

1
2
<%= radio_button_tag :foo,1,true %>
<%= radio_button_tag :foo,0,false  %>

checkedのon offは第3引数にbooleanを渡す。
第3引数はデフォルトでfalse

んで、radio _button

1
2
3
4
<%= f.radio_button :web_nomination_system_disp, 1, :checked => true %>
<%= f.radio_button :web_nomination_system_disp, 1, :checked => nil %>
<%= f.radio_button :web_nomination_system_disp, 1, :checked => "" %>
<%= f.radio_button :web_nomination_system_disp, 1, :checked => false %>

radio _buttonは非チェックはnilと"“とfalseでもいけた。
詳しくはこれ以上調べない!(`・∀・´)

間違っていたので一部修正しました。
すいません