我有一个模型,我们称之为“用户”。它有一个名为“age”的字段,它是一个int
当我这样做时:
user = User.find(:all, :select => "age").first
age = user.age
我将年龄作为字符串返回,即使它是一个整数列。
我知道我可以轻松地使用age.to_i来获取整数,但有时我会忘记,并且当我最终将字符串与整数进行比较时,它会转向下游的错误。
如何进行查找,并在列为int时选择返回实际整数?当我使用User.where时,它确实返回一个实际的整数。我希望User.find的行为方式完全相同。
答案 0 :(得分:1)
类型转换以及来自数据库的数据的许多其他转换可以通过为相关属性编写方法,并直接访问属性来转换它们来完成。
class User < ActiveRecord::Base
def age
self[:age].to_i
end
end
User.new(:age => "29").age # => 29
例如,您可能还希望在将字符串转换为符号或将BigDecimal用于货币时执行此操作。在某些情况下,还需要编写自定义setter方法。
我确信那里有一个宝石,您可以在属性上定义类型转换,以便为您自动生成这些方法。
答案 1 :(得分:-2)
你为什么用这么长的形式? 试着这样做: User.first.age