1

在我的用户模型中,我有以下验证:

  validates :password, :presence => true, :length => { minimum: 8 }, :on => :update_settings

如果我不使用:on验证器,它可以全面工作。但是,使用 :on 执行指定操作时,我没有得到任何验证。

该表格将:action="/users/1/update_settings"

路线设置:user_update_settings PUT /users/:user_id/update_settings(.:format) users#update_settings

我已经检查了这里的指南。相同的验证适用于 :create 等标准操作,但不适用于我自己的操作。

你能看到我还缺少什么来使这个验证有效吗?谢谢!

4

1 回答 1

2

我认为您对:on选项的用途感到困惑。它不是用于指定控制器上的操作,而是用于指定记录上的操作。以您在此处尝试执行的方式将控制器操作与模型验证联系起来将完全违反 MVC 原则。

检查文档

:on 选项可让您指定何时进行验证。所有内置验证助手的默认行为是在保存时运行(无论是在创建新记录时还是在更新记录时)。如果要更改它,可以使用 :on => :create 仅在创建新记录时运行验证,或使用 :on => :update 仅在更新记录时运行验证。

因此,该on选项仅采用三个可能值之一:(:save默认值):update:create.

给定您的update_settings操作名称update_attributes(请注意,这意味着它还将在更新记录的任何其他控制器操作中应用验证,因为条件不特定于任何特定的控制器操作。update_attribute:on => :update

于 2012-11-18T14:32:53.107 回答