应用验证模块仅在某些控制器中建模

时间:2012-06-08 22:46:55

标签: ruby-on-rails module controller extend mixins

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

guest虚拟机只通过一个控制器与模型进行交互,我们希望某些验证仅适用于此情况。我们想要应用的验证存在于模块中。

我尝试在控制器操作中执行类似的操作,但它似乎不起作用:

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

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

有更好的方法吗?

谢谢!

2 个答案:

答案 0 :(得分: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,您将告诉对象运行条件验证。

答案 1 :(得分:0)

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