« 法と情 | トップページ | 残業と効率 »

2007年8月 8日 (水)

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テーブル
id int,
count varchar(255),
test varchar(255),
type int
 

hogehogeテーブルをそのままARで使用し、[*]でselectを行うと、エラーになります。
ですが、エイリアス名を使用すればエラーはなくなります。

 
select * from hogehoge

という、SQL文を

select id, count,test, type as wtype from hogehoge
 

というように、エラーの原因となっている「type」カラムを、「wtype」等という別名にしてやればエラーはなくなります。

但し、ARにてアクセスを行う際には、hogehoge.typeではなく、hogehoge.wtype(エイリアス名)にてアクセスを行う必要があります。

|

« 法と情 | トップページ | 残業と効率 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/137565/16041562

この記事へのトラックバック一覧です: ruby on rails:

« 法と情 | トップページ | 残業と効率 »