【发布时间】:2011-12-06 09:39:01
【问题描述】:
我需要在数据库更新前后比较一些 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 才能获得模型属性。有没有其他人经历过这个,解决过这个问题,也对此感到困惑?提前致谢
【问题讨论】:
标签: ruby-on-rails ruby model attributes symbols