我需要在数据库更新之前和之后比较一些Rails (2.3.11)模型属性值,所以我首先查找记录并将现有的属性值保存在哈希中,如下所示:
id = params[:id]
work_effort = WorkEffort.find(id)
ancestor_rollup_fields = {
:scheduled_completion_date => work_effort.scheduled_completion_date
}
work_effort.update_attributes(params.except(:controller, :action))
#etcetera
请注意,我遵循使用符号作为哈希键的“最佳实践”。
然后,我有一个方法,它接受模型和哈希值,以确定如果哈希值和模型属性不匹配可能需要采取的其他步骤。为了确定这一点,我尝试在每个循环中获取模型属性值,但一开始我得到了nil:
def rollup_ancestor_updates(work_effort, ancestor_rollup_fields)
ancestor_rollup_fields.each do |key, value|
model_val = work_effort.attributes[key] #nil
#etcetera
在调试上述内容时,我注意到硬编码一个字符串作为键:
work_effort.attribute['scheduled_completion_date']
返回所需的值。因此,在我的每个代码块中,我尝试了以下方法,它起作用了:
model_val = work_effort.attributes[key.to_s]
有没有其他方法可以做到这一点?对我来说,只有3个月的Ruby/Rails经验,使用符号作为哈希键并调用.to_s获取模型属性是很困惑的最佳实践。是否还有其他人遇到过这种情况,或者也感到困惑?谢谢