我使用Rails创建了一个在线调查工具(3.2.8)。 答案和响应保存在不同的对象中(事实上超过15个不同的模型) 我使用devise作为用户管理系统。
在完成所有访谈后,管理员可以在验证每个用户访谈的内容时修改用户响应。我希望只要管理员验证或修改响应,就会将名为“admin_modified”的属性设置为true。
我知道在MVC中我不应该在模型中访问用户属性,但是只有当记录的用户是管理员而没有修改存在save / create / update_attributes的每个地方时,我怎么能将此属性设置为true 15种不同型号的命令?
有一种简单而正确的方法吗?
谢谢!
答案 0 :(得分:1)
为什么不存储哪个管理员修改/验证了对象而不是仅仅是一个显示它是否被修改的布尔值?
以下是我将如何实现它:
在用户中,创建一个方法modify_form_object
甚至modify_form_object_as_admin
,它接受对象和新属性。你会这样称呼它:
@user.modify_form_object(form_object, new_attributes)
它将设置对象的admin_id
,并使用属性更新对象。
或者,您可以覆盖ActiveRecord的保存方法,检查current_user
是否为管理员,并在字段存在时分配字段。