我在Rails 4中这样做:
ruleChange.old_value = (Filetype.new(:name => 'ritesh'))
但是,在访问ruleChange.old_value
时,它会返回字符串
作为#Filetype:0x007f87b2dce4c0
,而不是对象。结果ruleChange.old_value.name
抛出以下异常:
未定义的方法`name' for" Filetype:0x007f87b2dce4c0":String
这里有什么问题?
答案 0 :(得分:0)
如果old_value是数据库中的字符串属性,则无法在其中存储对象。 您可以存储该对象的名称属性(仅在名称唯一时才相关)
更好的做法是使用old_value_id来存储旧对象的ID。
像这样,你可以做current_object.old_value_id = my_old_object.id.
并找到这样的对象:MyOldObject.find(current_object.old_value_id).name
或者您可以定义belongs_to关系以直接查询旧对象:current_object.my_old_object.name
belongs_to :my_old_object, :class_name => 'my_object', :foreign_key => 'my_old_object'