2012-04-24 9 views
1

通常のデータベース列では、列タイプに応じてRubyのデータ型が自動的に選択されます。つまり、decimal/integer/varchar列が最終的にBigDecimal/Fixnum/String属性になります。動的列に使用するデータ型を定義するにはどうすればよいですか?

しかし、私は、計算列

Model.select(['models.*', 'calculated_int_column']).other_arel_stuff 

を使用してデータベースを照会する場合は、属性calculated_int_columnはいつも、私はselect文でintegerに明示的なキャストを使用している場合でも、Stringオブジェクトが含まれています。

これは、Railsがスキーマを使用して列の種類を検索するためです。

この列に使用するRubyタイプをRailsにどのように伝えることができますか?

ありがとうございます。これはあなたが望む答えですが、あなたは整数を返すためにgetterメソッドを上書きすることができれば

答えて

0

わからない:?

class Model 
    def calculated_int_column 
    @calculated_int_column = 0 if @calculated_int_column.nil? 
    @calculated_int_column.to_i 
    end 
end 
+0

は、私はむしろ、@ calculated_int_column.nilない限り'@calculated_int_column.to_iで行くと思いますが '私は多くの計算された属性を持っているので、より一般的な解決策を望んでいました。 (将来のキャッシング機能はそれらを減らすかもしれませんが) –

+0

ええ、あなたのアプリケーションを壊すかもしれないゼロの値を返すことはちょうど場合のために最初の行を置くことでしたかどうか分かりませんでした。 – agmcleod

関連する問題