blog.sowatchasayin

Rails etc.

知らなんだ

render :partialって毎回書くのうっとうしいなー。と思っていたところでした。
基本、パーシャルしかレンダーしないっす。

What's New in Edge Rails: render Stops Being High-Maintenance

2.3からは
render @article

なんとすまーとな。

最新のRailsでrestful_authenticationを使う苦労に苛まれる初秋の一日でした。

2.3.4でrestful_authenticationのspecが通らない。この子たちのせいだった。

Rspecが新しいとダメな所がありました。下記のパッチみたいに直せばOKでした(update for rspec > 1.1.12らしい)。
http://github.com/dchelimsky/restful-authentication/commit/ad92c6cb52500c37ef81e30ac4e79adffc2f4d39

formatted_* routesが無くなった。これで通るっす。
- formatted_user_path(:id => '1', :format => 'xml').should == "/users/1.xml"
- formatted_user_path(:id => '1', :format => 'json').should == "/users/1.json"
+ user_path(:id => '1', :format => 'xml').should == "/users/1.xml"
+ user_path(:id => '1', :format => 'json').should == "/users/1.json"

いきさつ
What's New in Edge Rails: No More Formatted Routes
Add optional :format argument to named routes

XSS怖い、全部マークアップ外す。

XSS怖いですね。
Webのセキュリティ努力のゴールにあるのは「絶望」のみ

ということで遊びで作ってるRailsアプリもちゃんと対策しようと思いました。

で、Safe ERBを入れようとすると。。。
mongrelだと使えない。わざわざWebrickを使うのもメンドウなんです。

探してみたらお便利プラグインありました。
入れただけで、勝手にマークアップをはずします。何もしないでOK。すばらしい。
TechCrunchで挙がっていた例のこいつ
'<script>alert('y0');</script>'

が、こう
'alert('y0');'

なります。

設定すれば一部のカラムだけ除外とかもできるみたいです。リッチなテキストにしたくなったら、そうします。
xss_terminate

ここで見つけました。
Auto-escaping HTML with Rails

AJAXなアクションでflashがついてこない

僕はRailsのflashが好きです。理由はありません。

しかし、こいつ、Ajaxのアクションに対してはうまく動作してくれない。
普通のhttpだとページ遷移すると消えてくれるのですが、どうやらxhrだとそこの片付けをしてくれません。何ということだ…。

なので、下記を参考にがんばって非同期に更新できるようにしました。
Rails Flash with Ajax
flashの部分をpartialに切り出して、毎回page.replace_htmlしてあげる戦略です。

書いてある通りにやろうとしたらダメだった。
ヘルパーにちゃんとpageオブジェクトを渡してあげる。

module ApplicationHelper
~~~~~
def reload_flash(page)
page.replace_html 'flash', :partial => 'layouts/flash'
flash.discard
end
~~~~
end


ちなみにビューのremote_form_forでupdate_pageしようとしたらダメだった。
コントローラを通る前のflashパーシャルをrenderしても、flashに何も入ってないから意味ないし。

配列おまとめyield

def お徳用(商品)
  return if 商品.length == 0
  if 商品.length >6
    [商品[0..5]] + お徳用(商品[6..商品.length])
  else
    [商品[0..5]]
  end
end

これを読んでおいてよかった。と思った瞬間。
(とはいえ、まだ全部読んでない)
The Little Schemer, 4th EditionThe Little Schemer, 4th Edition

The MIT Press 1995-12-21
売り上げランキング : 3390

Amazonで詳しく見る
by G-Tools


できた!と思ったら、each_sliceなんてものがあるのか…

traps in a sandbox

Lessons learnt the hard way: Don't use script/console --sandbox on production apps
It also commits implicit commit like ALTER TABLE. just get fucked now.

script/console --sandboxでALTER TABLEとかすると、その前の変更がコミットされちゃいます。くそ!

乗組員。

Debian Lenny + Rails2.3.3 + Passenger2.2.4で、デプロイしたっす。
「とりあえずやってよう」と思いやってみたら、特に何の問題もなく、あっという間に配備できました。
インストール後、
# passenger-install-apache2-module
で対話的に進みます。

参考:
Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用

Author

Fujimura Daisuke
http://fujimuradaisuke.com

Labels