Bootstrapの.modal-lgを知らなかった…

http://getbootstrap.com/javascript/#modals-sizes
デフォルトの.modalは幅が小さめだが、.-lgを指定すると幅を広げれられる。(ついでに-smという小さくするオプションもある)

https://github.com/twbs/bootstrap/releases
を見ると、3.1.0で追加されたらしい、1年半前…。

これ以降のバージョン使ってる時も、独自のクラス追加しちゃってたよー。

Polymorphicなモデルをgeneratorで作る

$ rails g model comment content commentable:references{polymorphic}

何回打っても覚えられない。

ライブラリ内でgsub!されててハマった

Rubyでとあるライブラリを使っていた時、

foo = Foo.first
SomeFormatter.format(foo.bar) # 正しい値
SomeFormatter.format(foo.bar) # 誤った値

という感じで、2回目以降の結果がおかしいという事態が起きた。

ずっと使ってたライブラリで今まで問題なかったのに、なんでだ?と思って中身を読んでみたら、引数をgsub!されてた。

これまでは使い捨ての値しか渡したことなかったので、問題に気付かなかった。(今回インスタンス変数を渡した)

2回呼ぶ、みたいなテスト書いてなくてテストで気づけず、わりと焦った…。

ActionController::InvalidAuthenticityToken

改めてちゃんと理解しようと思って、以下のソースを呼んだ。

https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/request_forgery_protection.rb
トークンの発行とか検証のロジック。

https://github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/csrf_helper.rb
metaタグの出力。

意外とシンプル。

Railsのcookie_storeのセッション有効期限を変更する

デフォルトだと何も設定されないので、ブラウザを閉じるとCookieが破棄されてしまう。

設定自体はとても簡単で、config/initializers/session_store.rb

Rails.application.config.session_store :cookie_store, key: '_blog_session', expire_after: 2.week

と書けばいい。(expire_afterを追加)

以前調べた時、ドキュメントに記載がなくて困ったんだけど、今見たら、edgeの方には追加されてた。
http://edgeapi.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html

https://github.com/rails/rails/commit/a5eddb534f6c7a76acff9c2e54d394e4697d9fd4
該当のコミットはこちら。GJすぎる。

これはコミッターの方が対応されたようだけど、これぐらいなら僕にだってできるはずなので、今後「あれ?これみんな使ってるけどドキュメントにないなぁ」みたいなの見つけたらPRしよう、と思った。