ruby on rails
さてさて、近頃はrubyをメインに仕事をしています。
railsを使用し、Webアプリを作っています。
確かに便利ではありますね。
融通聞かないこともありますが。
仕事で使用していく中で、気になるところなど、PHPの時と同じく、いろいろと書いていきたいと思っています。
さて、何から書こうかな・・・
ActiveRecord(以下ARと略す)は便利なのですが、融通が利かないところもあります。
特に、AR内で予約済みのメソッドと同等になるカラム名が存在した場合、seklect(findやfind_by_sqなど)自体も出来ません。
ただし、selectの戻り値(カラム名)が、かぶらない場合には、問題ないようですね。
すなわち、「*」とすると、すべてのカラムを取得しようとして、ARが、カラムの構造を取り込みます。
その時、カラム名と予約メソッド名が重複してしまうと・・・・
The single-table inheritance mechanism failed to locate the subclass: 'c'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite xxx.inheritance_column to use another column for that information.
等という、エラーメッセージが出てしまい・・・・
うんともすんとも動かなくなります。
(typeというカラム名を作ると上記エラーが出ます)
もう、カラム名を変えると言うのが手っ取り早い手段ではありますが、新規開発ならいざ知らず、現存のDB構造のダンプツールなどを作りたい場合には、カラム名称を簡単に変更できませんよね。
でも、実は簡単に解決できます。
|
hogehogeテーブルをそのままARで使用し、[*]でselectを行うと、エラーになります。
ですが、エイリアス名を使用すればエラーはなくなります。
|
というように、エラーの原因となっている「type」カラムを、「wtype」等という別名にしてやればエラーはなくなります。
但し、ARにてアクセスを行う際には、hogehoge.typeではなく、hogehoge.wtype(エイリアス名)にてアクセスを行う必要があります。
| 固定リンク
この記事へのコメントは終了しました。
コメント