【问题标题】:How do I exclude password fields from validation during record update? (Rails 3.0.4, Ruby 1.9.2)如何在记录更新期间从验证中排除密码字段? (轨道 3.0.4,红宝石 1.9.2)
【发布时间】:2011-07-31 03:43:06
【问题描述】:

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

视图文件中的字段:

<%= f.password_field :password %>
<%= f.password_field :password_confirmation, :label => 'Confirm Password' %>

在互联网上搜索时,我发现了这段代码,我认为这是针对以前版本的 Ruby/Rails 的。 (我会放在我的用户模型中。)

validates_presence_of :password, :on => create

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

validates :password, :presence => true, :confirmation => true

我已经搜索了其他帖子,并且肯定可以使用一些方向。

-- 免责声明 -- 我确实看到有关于条件验证的屏幕截图,但我目前无法观看。

谢谢大家。

编辑 - 插入以下代码,它确实允许更新用户记录,而不会抱怨密码字段丢失。

validates :password, :presence => true, :confirmation => true, :on => :create

【问题讨论】:

  • 当然,我一发布问题就(有点)解决了这个问题。但是,我认为我的解决方案(我在问题底部添加的)不是一个正确的解决方法,将来我开始更改密码时会遇到问题。
  • 但是如果有更新怎么处理。就像您正在执行重置密码或更改密码之类的操作?
  • @KevinHorvath -- 您的问题超出了本主题的范围。你的搜索把你带到这里了吗?

标签: ruby-on-rails ruby validation conditional


【解决方案1】:
validates :password, :presence => true, :confirmation => true, :on => :create

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

【讨论】:

  • Markus,如您所见(我的编辑/cmets 方面有一点滞后)我最终也尝试了您的解决方案。谢谢!并感谢您的链接。
【解决方案2】:

我建议您执行以下操作:

validates :password,
  :presence => true,
  :confirmation => true,
  :if => lambda{ new_record? || !password.nil? }

这基本上是说密码需要在创建时使用 password_confirmation 进行确认,并且当密码不为零时也需要确认 - 例如当用户更新密码时。

【讨论】:

  • 非常感谢潘。我注释掉了我最近的更改,添加了您的代码,然后成功更新了用户记录。正是我需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多