我想在编辑模型时执行一些验证,所以我认为最好的方法是在Rails中使用验证器before_update(ing)模型
before_update
。
有人可以使用before_update调用提供自定义验证器的示例吗?
例如:
我有一个类主题,我想只允许主题的创建者能够更改标题。
我想在编辑模型时执行一些验证,所以我认为最好的方法是在Rails中使用验证器before_update(ing)模型
before_update
。
有人可以使用before_update调用提供自定义验证器的示例吗?
例如:
我有一个类主题,我想只允许主题的创建者能够更改标题。
# Topic.rb
before_update :your_custom_validation
private
def your_custom_validation
# your code
end
你可以用任何回调来做到这一点。也就是说,指定过滤器并将符号传递给方法的名称。
您可能还想考虑添加一个像devise
这样的用户认证宝石,并且只允许登录用户做类似这样的事情,这与使用称为cancan
的权限宝石非常相称。
编辑:(打算把它放在这里也一样,即使它是在下面的评论) 我忘了执行顺序。如果合适的人登录(您可以在控制器中验证用户身份)或使用validate :custom_method
回调来触发其他验证,我仍然会推荐使用设计和查看等功能。如果您不是作者,验证失败,则无法保存。
您可以使用http://guides.rubyonrails.org/active_record_validations_callbacks.html#on before_update来自ActiveRecord中的验证fase。我刚刚发布的链接非常丰富。您可以使用自定义验证器和on选项。
如何检查以前和新的值?对于现有的价值和新的价值? – Immo
它不会工作。您无法对before_update进行验证,因为ActiveRecord在开始调用beffore_update时已经对验证进行了检查。看看http://guides.rubyonrails.org/active_record_validations_callbacks.html#available-callbacks – lucapette
所以唯一的方法是从控制器检查?在更新模型之前? – Immo