验证器:on不工作(ruby-on-rails)

时间:2012-11-18 14:21:06

标签: ruby-on-rails-3 validation

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

  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

我查看了指南here。相同的验证适用于标准操作,例如:创建但不依赖于我自己的操作。

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

1 个答案:

答案 0 :(得分:2)

我认为你对:on选项的含义感到困惑。它不是用于指定控制器上的操作,而是用于指定记录上的操作。完全违背MVC原则,将控制器操作与模拟验证联系起来,就像你在这里尝试一样。

检查docs

  

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

因此,on选项仅采用以下三种可能值之一::save(默认值),:update:create

根据您的操作名称(update_settings),我将假设您在该操作中调用模型上的update_attributes(或update_attribute),在这种情况下你应该在你的验证器中使用:on => :update。请注意,这意味着它还将在更新记录的任何其他控制器操作中应用验证,因为该条件不特定于任何特定的控制器操作。