0

我有一个可以由两种不同类型的用户编辑的模型。第一个具有登录名并具有特殊权限(我们称他们为“用户”)。第二个只是一些没有登录权限的随机用户(我们称他们为“访客”)。

来宾仅通过一个控制器真正与模型交互,我们希望某些验证仅适用于这种情况。我们要应用的验证存在于一个模块中。

我尝试在控制器操作中做这样的事情,但它似乎没有用:

@object = Model.find(params[:object_id])
@object.extend SpecialValidations

然后我们将检查对象的有效性(可能直接或在更新属性时),然后显示验证产生的任何错误。

有一个更好的方法吗?

谢谢!

4

2 回答 2

1

一种替代方法是在您的模型中包含以下内容:

attr_accessor :guest

def run_special_validations?
    guest
end

validate :special_validation1, if: run_special_validations?
validate :special_validation2, if: run_special_validations?

然后,通过设置控制器@object.guest = true,您将告诉对象运行条件验证。

于 2012-06-08T22:56:54.973 回答
0

您可以在没有任何条件的情况下保留验证,并在user控制器中跳过它(update_attribute例如,通过使用方法)。

于 2012-06-09T01:06:05.937 回答