用户为admin时保存对象时的不同行为

时间:2013-01-08 15:14:35

标签: ruby-on-rails ruby ruby-on-rails-3 model admin

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

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

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

有一种简单而正确的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

以下是我将如何实现它:

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

@user.modify_form_object(form_object, new_attributes)

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


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