涉及current_user的Rails自定义验证

时间:2016-04-28 10:00:14

标签: ruby-on-rails ruby validation activemodel

我一直在开发一个rails应用程序,我们允许不同的用户为模型的属性提交不同的值。

例如,所有用户都可以提交大于10的值,同时允许管理员提交一位数值。

我们知道模型无法访问current_user帮助程序,因此您无法轻松编写自定义验证程序。

实施此类功能时的最佳做法是什么?

3 个答案:

答案 0 :(得分:0)

始终建议将current_user之类的逻辑保留在模型之外。 但考虑到你的要求,

好吧,因为我们的控制器知道current_user,那么它应该是告诉你的模型的控制器。

因此,在您的模型中为attr_accessor添加current_user 并在您的控制器中执行类似

的操作

@model_obj.current_user = current_user

现在说这一切。我建议使用替代模型验证。因为实际上你要做的是根据用户的角色给予用户权限。你最好使用像Pundit这样的宝石。

答案 1 :(得分:0)

这可能是您在控制器中强制执行验证的情况。严格来说,这不是关于模型验证,而是关于用户授权。 Pundit是一个很好的授权宝石,或者你可以自己动手。

答案 2 :(得分:0)

这是validation contexts的完美用例。您在模型中定义了 contexts ,但随后您的控制器指定要使用的上下文。

这是贾斯汀·韦斯(Justin Weiss)撰写的一篇不错的文章,尽管他似乎并没有意识到他们解决了其他任何方式都无法解决的问题,因为基于用户的验证规则是完美的例子,因为用户模型访问当前用户,并且您的控制器未设计为指定验证规则:

https://www.justinweiss.com/articles/a-lightweight-way-to-handle-different-validation-situations/