2011-07-31 39 views
4

我想在编辑模型时执行一些验证,所以我认为最好的方法是在Rails中使用验证器before_update(ing)模型

before_update 

有人可以使用before_update调用提供自定义验证器的示例吗?

例如:

我有一个类主题,我想只允许主题的创建者能够更改标题。

回答

1
# Topic.rb 
before_update :your_custom_validation 

private 
    def your_custom_validation 
     # your code 
    end 

你可以用任何回调来做到这一点。也就是说,指定过滤器并将符号传递给方法的名称。

您可能还想考虑添加一个像devise这样的用户认证宝石,并且只允许登录用户做类似这样的事情,这与使用称为cancan的权限宝石非常相称。

编辑:(打算把它放在这里也一样,即使它是在下面的评论) 我忘了执行顺序。如果合适的人登录(您可以在控制器中验证用户身份)或使用validate :custom_method回调来触发其他验证,我仍然会推荐使用设计和查看等功能。如果您不是作者,验证失败,则无法保存。

+0

如何检查以前和新的值?对于现有的价值和新的价值? – Immo

+1

它不会工作。您无法对before_update进行验证,因为ActiveRecord在开始调用beffore_update时已经对验证进行了检查。看看http://guides.rubyonrails.org/active_record_validations_callbacks.html#available-callbacks – lucapette

+0

所以唯一的方法是从控制器检查?在更新模型之前? – Immo