我想用调查功能构建应用程序。要从用户那里收到答案,我已经添加了非持久属性 is_checked (我的架构中也有持久属性 is_right )。
class Answer < ActiveRecord::Base
belongs_to :question
attr_accessor :is_checked
def initialize
self.is_checked = false
end
after_initialize :default_values
private
def default_values
self.is_right ||= false
end
end
但是当我打开rails console并运行时:
Survey.first.questions.last.answers.last.attributes
没有 is_checked 属性。如果我在答案实例上调用 is_checked getter ,我会获得 nil 。
答案 0 :(得分:3)
Imho您的initialize
方法永远不会被调用,否则,因为您没有调用super
,您将失去所有活动记录初始化。
您的initialize
肯定与原始签名不匹配(它至少接受哈希),但after_initialize
完全是出于这个原因而引入的。
所以我只想扩展default_values
以包含设置is_checked
。
同样attr_accessor
为实例变量创建访问方法,所以只需设置该实例变量。
所以我会写
class Answer < ActiveRecord::Base
belongs_to :question
attr_accessor :is_checked
after_initialize :default_values
private
def default_values
self.is_right ||= false
@is_checked = false
end
end