DBMSはPostgreSQLです。
コントローラー内:
@data = current_user.myitems.all(:select => 'record_date, count(record_date) as value', :group => 'record_date')
ビューで:
<% @data.each do |item| -%>
<%= item.record_date.utc.strftime('%Y%m%d') %>
<% end -%>
すべてが正常に機能しています。
しかし、日付フィールド名を変更すると、次のようになります。
@data = current_user.myitems.all(:select => 'record_date as recdate, count(record_date) as value', :group => 'record_date')
<% @data.each do |item| -%>
<%= item.recdate.utc.strftime('%Y%m%d') %>
<% end -%>
エラーメッセージが表示されます:
undefined method `utc' for "2012-02-09 17:03:47":String
WTF ?? !! タイプを文字列にキャストするように注文しませんでした!!!
SQL文字列でエイリアスを作成したり、モデルでエイリアスを定義したりしないことをお勧めしますが、エイリアスが必要なのは1回だけで、表示目的のみであるため、モデルを変更して列のエイリアスを作成したくありません。コントローラのメソッドには、それぞれが独自の列名を持つ複数のselectステートメントが存在する「 case」ステートメントがあります。「if」ステートメントを使用せずに、しっかりと表示するためにエイリアスを作成する必要があります。