RSS
 

Archive for the ‘Rails’ Category

delayed_job の daemon がログを吐くのを抑制

14 Apr


こんな感じのログが毎秒出力されるので、非常に精神衛生上よろしくない。
止めましょう。
 
No Comments

Posted in Rails

 

redirect_to and return と書いて良いのか?

07 Dec

みたいなコードを初めのうちはつい書いてしまいハマる。
正しくは、以下のように return しなければならない。

しかし1行で書けていたものが4行になってしまうのはいかにも不格好である。

あちこちでコードを読んでいるとたまにこんなのを見かける。

これは見た目もかっこいいし意味も判り易くて cool だ。

ところで、 and return ってなんだ?

これは何の事はない、 redirect_to の戻り値がたまたま true なのを利用して、 and で受けて次の文を書いているだけである。
redirect_to が万が一 false や nil を返してきたら return は実行されない。
ちなみに redirect_to の実装を見ると、少なくとも現時点では false や nil にならないことは確実だが、将来に渡って保証されているわけではないので気持ち悪い。

and の代わりに true/false に関わらず確実に実行する接続詞として ; があるので、以下のように書いてみる。

残念ながらこれはうまくいかない。 unless より ; のほうが優先順位が高いので、

という意味になってしまう。

仕方なくカッコでくくる。

これは正しく動くが、かっこわるいよねえ。カッコ付けててかっこ悪いってやつ?

さらに他のコードを読み漁ると、こんな書き方もある。

and return 記法に比べればcoolさは劣るが、比較的スマートな書き方だ。何の意味も無い値を return することについては一瞬不安になるが、 action の戻り値を気にしなければならなくなるような仕様変更は将来的にも有り得ないと思われるので、問題ないだろう。

というわけで、結論としては return redirect_to 記法をオススメ、というところで筆を置くつもりだったのだが、何やら公式っぽいドキュメントに、「and return」って書くといいよ! と記述されてるので、いいのかもしれんね。
(だったら redirect_to の実装の末尾に true の一行を足しておきたいなあ)

 
No Comments

Posted in Rails

 

Rails で 華麗に sql union する

04 Oct

model の中にこんなのを書く

そんで、以下のように使える。

参考: http://coderwall.com/p/9hohaa

 
No Comments

Posted in Rails

 

resources を nest するときは shallow を使うと幸せになれる

06 Sep

既にみんな使ってると思うけど、日本語の解説が見あたらなかったので一応書いた。

こんな風にすると、新規に User を作る時の URL が /groups/:group_id/users/new となって、大変美しい。
ところが、いざ User が生成された後にその User を show するには /groups/:group_id/users/:id などとしなければならなくなる。
これは冗長である。 User の id が group に寄らず unique であるなら、 /users/:id で参照出来て然るべきだ。

そこで、shallow です。

こうすると、なんと、

な、なんて美しいんだ。。!

何が起きているかというと、user_id を指定しない action である index, new, create の3つは group_id を必要とし、それ以外の action では user_id のみを指定すればよい、ということに、たったの “shallow: true” だけでなってしまったのである。

もちろん、以下のように action を拡張した場合

には、

そうですそうです、そうして欲しかったんですよ、という状態にちゃんとなっている。

さらに深く resources を nest した場合にも、 shallow:true は1つだけで大丈夫。

この場合、entries#new は /user/:id/entries/new となり、 entries#show は /entries/:id となる。

shallow の挙動は、resources の nest 問題について一度もハマってみたことの無い人にはさっぱり理解出来ないような一見複雑な動作だが、物凄くよく考え抜かれている。Rails のこういうところが結構好きなのだな、僕は。

最後に、おそらく多くの方が form でつまずくと思うので、その時はこれを読みましょう: http://stackoverflow.com/a/9944554/683157

 
No Comments

Posted in Rails

 

MySQLで緯度経度からの半径で円内検索する

21 Aug

Rails3 では、model に

としておいて、

とか、

とか。

計算式は何をしてるかというと、まず、中心地点の緯度から、その地点における緯度と経度の長さの比を算出。(緯度1度あたりの距離は地球上どこでも同じだが、経度1度あたりの距離は赤道から離れるほど小さくなる。東京では0.8倍くらい)これをfactorに保存。
GLength(LineString(point,point)) で三平方の定理を計算してくれるので、経度を補正してこれに入れ、出てきたものに111.11km(赤道における1度の長さ)を掛ける。

 
No Comments

Posted in Rails

 

glyph icon helper for twitter-bootstrap with Rails

26 Jul
 
No Comments

Posted in Rails

 

has_many の要素を update_attributes する際に uniqueness validation が効かない

24 Feb

Card の validation が走る時点で、 #(1) はDB上に存在しないので、#(2) の validation がまんまと通ってしまう。

update_attributes を使わずに、
m.cards << Card.new(suite: "spade", number: "4") などと1つずつ入れればもちろんOKなのだが。。

 
No Comments

Posted in Rails, Ruby

 

list_tag で Array をリストに展開

01 Feb

あったらいいのに、ということで作った。ApplicationHelper とかに入れればOK.
array がnilや空のときには ul そのものが出ないのがポイント。

 
1 Comment

Posted in Rails