ฉันจำเป็นต้องเปรียบเทียบค่าแอตทริบิวต์ของโมเดล 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
โปรดทราบว่าฉันปฏิบัติตาม "แนวทางปฏิบัติที่ดีที่สุด" ในการใช้สัญลักษณ์สำหรับแฮชคีย์
จากนั้นฉันมีวิธีการที่ใช้โมเดลและแฮชเพื่อกำหนดขั้นตอนเพิ่มเติมที่เป็นไปได้หากค่าจากแอตทริบิวต์แฮชและโมเดลไม่ตรงกัน เพื่อพิจารณาสิ่งนี้ ฉันพยายามรับค่าแอตทริบิวต์ model ในแต่ละลูป แต่ในตอนแรกฉันได้รับศูนย์:
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]
มีวิธีอื่นในการทำเช่นนี้หรือไม่? สำหรับฉันด้วยประสบการณ์ Ruby/Rails เพียง 3 เดือน การใช้สัญลักษณ์เป็นแฮชคีย์ตามแนวทางปฏิบัติที่ดีที่สุดที่กำหนดไว้นั้นทำให้เกิดความสับสน แต่จากนั้นต้องเรียก .to_s บนสัญลักษณ์เพื่อรับแอตทริบิวต์ model มีใครเคยประสบปัญหานี้ เคยแก้ไขปัญหานี้ เคยสับสนกับเรื่องนี้บ้างไหม ขอบคุณล่วงหน้า