menu
書いてる野郎
orebike@gmail.com
2009年05月20日
ActiveRecord では検索結果 model でその値はアクセサによってアクセスできるが・・・id という名前のアクセサは自動的にPKを指すものになる。 model に明示的に PK を指示してもそのカラムが id の alias のように働く。
さらにすべてのオブジェクトは Object クラスから継承されているわけで、ActiveRecord は意図的に Object の id メソッドをオーバーライドして使っている。 本来の id は id という名のメソッドに控えてあって、アクセスできないわけではないので、これはActiveRecordの世界。
ここでさらに id が入ってくると、どういう動きになるかは予想できない、結果 id は単にPKの値を指すわけになっているわけだがね。
find_by_sql を使い出力カラムに as を使い別名を指定した場合、model にはその別名でのアクセサが自動的に作成され、その値は文字列として格納される。
だからこういう風にすれば一応取得できる。
a = Hoge.find_by_sql(["SELECT id as piyo_id FROM hoges WHERE hoge_id = ?", 123]) p a.piyo_id
こんなやり方は間違っていると思うのでちゃんと設計すべきだと思う。