Categories
open all | close allTags
デュアル・コア | テスト | パソコン | Flash | OpenID | タグ | モデル | 認証 | ドキュメント | 国際化 | rake | RESTful | CSRF | Migration | アクセス制御 | Subversion | Aptana | フォーム | 名称 | スキンエンジンSearch
結局難航
テーブル名にプレフィクスを付ける件,environment.rbの中でActiveRecord::Base.table_name_prefixを設定すればいいと書いてあったので試したところ,見事に動きませんでした。いろいろ調べて分かったことはActiveRecord::Baseクラスの中で,モデルのクラス名からテーブル名を生成するtable_nameメソッドの中で,このプレフィクスが使われているということ。それに対して先日モデル・クラスの設定で行ったset_table_nameというのは,このメソッドをオーバーライドするものだった,ということです。オーバーライドしちゃっているから,ActiveRecord::Base.table_name_prefixが働かなかったわけです。
ActiveRecord::Baseとモデルの間に別のクラスを作って対処しようかと思ったのですが,そうするとAptanaでクラスを生成するたびに,そこを書き換えなければならず,メンテ的にかなりいやな感じ。Rubyでは存在しているクラスのメソッドを置き換えられるので,それで対処できないか考えました。
environment.rbの中でActiveRecord::Base.table_name_prefixを設定するのは同じですが,このほかに,
class ActiveRecord::Base
def set_base_name(name)
@base_name = name
end
def table_name
@@table_name_prefix + @base_name
end
end
といった記述を加え,モデル・クラスでは
set_base_name :item
などと書いてみました。しかしこれはset_base_nameがないというエラーになります。う~ん,environment.rbを先に見てくれないのか,それとも書き方の問題か。またストップしてしまいました。
PS. このブログのRSSを購読している人が何人かいるのですが,だれだろう。ちょっと気になります。
Comments
あ、RSSを購読してるのは僕です。
あー,hsurさんでしたか。多分,知っている人のだれかだろうとは思っていました。^^)