RoR+MySQLをセットアップしています。データベースには、Tinyintフィールドtがあります。Railsからtの値を読み取ると、TinyintフィールドがRailsによってブール値として解釈されるため、trueまたはfalseになります。ここまでは順調ですね。
このフィールドtをRailsから実際の整数として読み取るにはどうすればよいですか?
RoR+MySQLをセットアップしています。データベースには、Tinyintフィールドtがあります。Railsからtの値を読み取ると、TinyintフィールドがRailsによってブール値として解釈されるため、trueまたはfalseになります。ここまでは順調ですね。
このフィールドtをRailsから実際の整数として読み取るにはどうすればよいですか?
http://apidock.com/rails/ActiveRecord/AttributeMethods/BeforeTypeCast/attributes_before_type_cast
例えば:
Model.first.attributes_before_type_cast['your_boolean_field']
返される値は DB によって異なります。postgesql では「f」または「t」です。
@sumskyi の応答に基づいて構築するには、このフィールドに常に通常の整数としてアクセスする場合は、モデルの組み込みメソッドをオーバーライドして、反復運動による損傷を回避できます。
class GroceryStore < ActiveRecord::Base
# rating is a TINYINT column
# we just redefine the method here to return the value cast how we want it
def rating
self.attributes_before_type_cast['rating'].to_i
end
end
呼び出すgrocerystore.rating
と、ブール値ではなく整数が返されます。