我有一个可以由两种不同类型的用户编辑的模型。第一个有登录并具有特殊权限(让我们称之为'用户')。第二个是一些随机用户,没有具有有限权限的登录(让我们称他们为'访客')。
guest虚拟机只通过一个控制器与模型进行交互,我们希望某些验证仅适用于此情况。我们想要应用的验证存在于模块中。
我尝试在控制器操作中执行类似的操作,但它似乎不起作用:
@object = Model.find(params[:object_id])
@object.extend SpecialValidations
然后我们会检查对象的有效性(可能直接或更新属性时),然后显示验证产生的任何错误。
有更好的方法吗?
谢谢!
答案 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
方法)。