使rails模型解释不是表中列的值

时间:2011-05-10 10:25:08

标签: ruby-on-rails ruby activerecord

我在模型上使用一系列命名范围来生成查询。在该查询中,有一个与另一个表的连接,其中我有一些布尔字段。 当我访问这些列的值时,它返回字符串(“0”和“1”)。

是否有一种干燥方式告诉模型如何解释这些列?(我知道我可以编写方法来覆盖访问者,但这感觉不对。)

我正在使用rails 2.3.8。

1 个答案:

答案 0 :(得分:2)

如果通过“覆盖访问者”,则意味着read_attributewrite_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。看看那里的例子。