エンコーディングが違う文字列を連結しようとすると発生するそうで、layout を入れ子にしていたりすると発生するとか。解決策としては文字列のエンコーディングをすべて utf-8 にそろえればよいとのことで、以下の通り実装。
ちなみに環境は Ruby 1.9.2 と Rails 3.0.9 です。この組み合わせはクサいらしい。

module ActiveSupport
class SafeBuffer < String
def concat(value)
if value.html_safe?
super(value.force_encoding('utf-8'))
else
super(ERB::Util.h(value.force_encoding('utf-8')))
end
end
alias << concat
end
end

require 'encoding_patch'
確かにこれでエラーは出なくなりました。
参考:
Ruby1.9+Rails3で"incompatible character encodings: UTF-8 and ASCII-8BIT"の対策
# application.rb じゃなくて environment.rb に書くと思った
1 comment :
config/initializers/ 以下にファイルを置くのが妥当かと。
Post a Comment