Rails验证最佳实践

时间:2015-07-29 13:11:06

标签: ruby-on-rails forms validation model

我对$( ".box" ).click(function() { copy = $(this).clone(); copy.addClass("box-active"); // save .box position + size // maximize div } $( ".box-active" ).click(function() { // minimize div to saved .box position + size $(this).remove(); } 进行了验证:

user

这很明显。当我创建(注册)新的 validates :password, presence: true, confirmation: true, length: { minimum: 6 }, :on => :create 时,我想填写他们的密码,这就是为什么user

案例1)当用户想要更新其帐户(假设更改其用户名)时,该表单只包含presence: trueemail字段。没关系,验证还可以。

案例2)他忘记了密码,并将他的“忘记密码链接”发送给他,并且他正在创建新密码的页面上。表单包含以下两个字段:密码和密码确认。但是,他将这两个字段留空并提交表单。验证通过,因为它只是username!因为案例1)

我无法添加:on => create,因为案例1)无法通过,因为没有密码字段。

在这种情况下我该怎么办?什么是最佳实践或这个“问题”的真正解决方案是什么?

1 个答案:

答案 0 :(得分:2)

我为这种情况所做的不是使用on: :create,而是使用我在设置/更改密码时设置的虚拟属性。像这样:

validates :password, if: :changing_password?
attr_accessor :password_scenario

def changing_password?
  self.password_scenario.present?
end

然后在您的控制器中,只要您需要密码,就可以将password_scenario设置为true。