在记录更新期间如何从验证中排除密码字段?(Rails 3.0.4,Ruby 1.9.2)

Tas*_*ass 5 ruby validation conditional ruby-on-rails

我有一个允许更新用户记录的表单.它包含以下字段:password和:password_confirmation但如果加密密码已存储在数据库中,我希望在它们上运行验证.

视图文件中的字段:

<%= f.password_field :password %>
<%= f.password_field :password_confirmation, :label => 'Confirm Password' %>
Run Code Online (Sandbox Code Playgroud)

在搜索互联网时,我发现了一些代码,我假设它是以前版本的Ruby/Rails.(我将把它放在我的用户模型中.)

validates_presence_of :password, :on => create
Run Code Online (Sandbox Code Playgroud)

由于我的用户模型中的密码验证语法不同(下面),我对我需要的语法感到困惑.

validates :password, :presence => true, :confirmation => true
Run Code Online (Sandbox Code Playgroud)

我搜索了其他帖子,肯定可以使用一些方向.

- 免责声明 - 我确实看到有关于条件验证的屏幕投射,但我现在无法观看.

谢谢,所有.

编辑 - 插入以下代码,它允许用户记录更新,而不会抱怨缺少密码字段.

validates :password, :presence => true, :confirmation => true, :on => :create
Run Code Online (Sandbox Code Playgroud)

Pan*_*kos 8

我建议你做以下事情:

validates :password,
  :presence => true,
  :confirmation => true,
  :if => lambda{ new_record? || !password.nil? }
Run Code Online (Sandbox Code Playgroud)

这基本上表示需要在创建时使用password_confirmation确认密码,并且当密码不为零时也需要确认密码 - 例如,当用户更新密码时.


Mar*_*ske 5

validates :password, :presence => true, :confirmation => true, :on => :create
Run Code Online (Sandbox Code Playgroud)

阅读更多关于Railsguides的信息:http://edgeguides.rubyonrails.org/active_record_validations_callbacks.html#on