Ruby on rails 当用户是管理员时保存对象时的不同行为

Ruby on rails 当用户是管理员时保存对象时的不同行为,ruby-on-rails,ruby,ruby-on-rails-3,model,admin,Ruby On Rails,Ruby,Ruby On Rails 3,Model,Admin,我用Rails(3.2.8)创建了一个在线调查工具。 答案和回答保存在不同的对象中(事实上超过15种不同的模型) 我使用Desive作为用户管理系统 完成所有访谈后,管理员可以在验证每个用户访谈内容的同时修改用户回复。我希望每当管理员验证或修改响应时,将名为“admin_modified”的属性设置为true 我知道在MVC中,我不应该在模型中访问用户属性,但如何仅当登录的用户是管理员时才将此属性设置为true,而不修改15个不同模型的每个保存/创建/更新属性命令的位置 有没有一种简单而正确的方

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

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

我知道在MVC中,我不应该在模型中访问用户属性,但如何仅当登录的用户是管理员时才将此属性设置为true,而不修改15个不同模型的每个保存/创建/更新属性命令的位置

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


谢谢

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

以下是我将如何实施它:

在用户界面中,创建一个方法
modify\u form\u object
或者甚至
modify\u form\u object\u as\u admin
,该方法接受对象和新属性。你可以这样称呼它:

@user.modify_form_object(form_object, new_attributes)
它将设置对象的
管理id
,并使用属性更新对象



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

您查看了吗?是的,但正如我所说,我只想知道是否有更快的方法来实现这一点(而不是在保存时注入用户对象),就像一个观察者,可以检查来自任何对象的任何保存消息,因为有超过15种不同的模型。你可以使用上面链接中使用的
current\u user
方法和标准。是的,这可能更灵活,但这意味着我需要找到每个有保存方法的地方。我希望使用before_save命令,但我知道我不应该访问模型中的用户实例。我相信这会有所帮助:但我还不熟悉观察者。最后,我在控制器中的每次保存之前都添加了一个审核方法