求助大家个问题:
对于 Project(项目)这个 model,与之相关联的有很多其他 model,比如,文档 Documents( project has_many documents),意向 Interests(projects HABTM interests) 等
需求:
要记录下所有的操作行为日志,以后要获取查看,要记录的日志应该包括两部分 线索 和 可读文本,可读文本是要后面输出的,所以想在保存日志的时候拼好存起来,到时直接输出可读文本,线索留底。
举个场景:
修改关联的对象,如 interests,线索类似是"interests: { amount: 20, rating: 5, ... }",输出的文本是"who 在 when 修改了 what(项目)的意向 aaa 的属性,新的值为 xxx"
做了某个动作,动作可以包括修改或创建多个对象,线索类似 { followers: 1, 2, 3, sector: 2, leader: 4 } , 输出的文本是"who 在 when 推进了项目,新的领导是 xxx4,新的协同者是 xxx1,xxx2,xxx3, 区域改为 中国"
想到的解决方案:
参考:
Event Sourcing Taking D out of CRUD
遇到问题:
参考:
# controller
Project.transaction do
project.remark = declared(params).remark
project.logdown(503, @current_user, {})
project.save
end
# model
def logdown(event_id, current_user, clue = {})
clues = self.changed_attributes.merge(clue) # 这里拿到的self.changed_attributes 是{ "remark"=>"#<Hashie::Mash funding_id=1 remark=\"hello\">"}
logs.create!(user_id: current_user.id, event_id: event_id, clues_cached: cues)
end
求各位高手指点一个优雅点的方法,或者其他好的思路