我有一个考试模型,它有一个数据库属性score
。现在,我想要另一个名为 的属性rating
,它将这个分数转换为评分(A、B、C、D、F)。我不想为 再创建一列rating
,所以我使用了虚拟属性,如下所示:
class Exam < ActiveRecord::Base
attr_accessor :rating
after_initialize :set_rating
after_find :set_rating
private
def set_rating
self.rating = case score
when 0..49 then "F"
when 50..79 then "B"
else "A"
end
end
在我可以调用的意义上,这很有效
e = Exam.find_by_student("John")
e.rating
但是,该对象e
没有附加属性等级。因此,如果我将对象传递e
给 Rails 视图,我将无法获得e.rating
评级是一个属性的位置。
我怎样才能实现我想要的,即 after_find 可用的无数据库属性?
谢谢你。