データベースがSJIS
ずーっと書こう書こうと思っていて忘れていた(汗
「Rails 2.1 で Shift-JIS」という記事に、今でも結構アクセスあるようなので、書いておきます。
データベース*だけ*SJISなのであれば、モデルの attr,attr= をオーバーライドしてその中でUTF-8とSJISの変換をした方が良いと思います。そうすれば、テンプレートもソースコードもUTF-8で書けるので。
確認していないですが、
(1. twitterで中田さんに、SJIS.includedの中あたりでHogeModelにやらせないと無意味というか、いろいろエラーになりそうと指摘を受けたのでちょっと変更。相変わらず実際に動かしては試してない)
(2. includeじゃなくてextendっぽい。)
lib/sjis.rb:
require 'nkf' module SJIS def self.extended(klass) klass.columns.each do |c| next unless [:string, :text].include?(c.type) define_method c.name do NKF.nkf("-Sw -m0", read_attribute(c.name)) end define_method "#{c.name}=" do |val| write_attribute(c.name, NKF.nkf("-Ws -m0", val)) end end super end end
class HogeModel < ActiveRecord::Base extend SJIS end
みたいにすればいいんじゃないかと思います。
config/database.rb の encoding: sjis も必要かな?
完動品ができたらトラックバックもらえるとありがたいです。