2

我用 Rails (3.2.8) 创建了一个在线调查工具。答案和响应保存在不同的对象中(实际上超过 15 种不同的模型)我使用 devise 作为用户管理系统。

完成所有访谈后,管理员可以在验证每个用户访谈的内容时修改用户响应。我希望每当管理员验证或修改响应时,将名为“admin_modified”的属性设置为 true。

我知道在 MVC 中我不应该在模型中访问用户属性,但是只有当登录的用户是管理员而不修改每个有 save/create/update_attributes 命令的地方时,如何才能将此属性设置为 true 15不同的型号?

有没有一种简单而正确的方法来做到这一点?

谢谢!

4

1 回答 1

1

为什么不存储哪个管理员修改/验证了对象,而不是简单地显示它是否被修改的布尔值?

以下是我将如何实现它:

在 User 中,创建一个方法modify_form_object,甚至modify_form_object_as_admin采用对象和新属性。你会这样称呼它:

@user.modify_form_object(form_object, new_attributes)

它会设置对象的admin_id, 并使用属性更新对象。


或者,您可以覆盖 ActiveRecord 的保存方法,检查是否current_user是管理员,如果该字段存在,则分配该字段。

于 2013-01-08T15:30:19.690 回答