我在模型上使用一系列命名范围来生成查询。在该查询中,有一个与另一个表的连接,其中我有一些布尔字段。 当我访问这些列的值时,它返回字符串(“0”和“1”)。
是否有一种干燥方式告诉模型如何解释这些列?(我知道我可以编写方法来覆盖访问者,但这感觉不对。)
我正在使用rails 2.3.8。
答案 0 :(得分:2)
如果通过“覆盖访问者”,则意味着read_attribute
和write_attribute
方法,那么这绝对是执行此操作的正确方法。 Rails类型自动转换字段,AFAIK没有直接影响类型转换的方法,只覆盖 setter / getters 。
为了诚信,举个例子:
def admin_user
read_attribute(:admin_user) == "1" ? true : false
end
def admin_user(v)
write_attribute(v ? "1" : "0")
end
注意:对于更复杂的情况(比如密码加密),最好的方法是ActiveRecord Callbacks。看看那里的例子。