轨道条件验证



我正在做一个项目,需要一些关于从哪里开始的帮助。我有三页

  • 更新用户
  • 创建用户
  • 管理员用户密码更改(如硬重置密码,但只有管理员可以重置用户的密码)
  • 更改密码

在创建用户名字时,必须确认姓氏、用户名、密码和密码。

在更新用户时,只有名字,姓氏和用户名是强制性的。

在管理员用户密码更改和更改密码上,只有密码和密码确认是强制性的。

你会怎么做?我认为这不可能通过validates_presence_of和 if 的模型来实现,因为场景太多了。任何帮助或指导将不胜感激。另外,如果你还不能说的话,我对Rails很陌生。

您可以将条件传递给验证:

validates :password, :confirmation => true, :presence => true
validates :first_name, :last_name, :username, :presence => true
validate :admin_user_password_change?

当然,您必须定义admin_user_password_change?方法是什么,以确定它是否是管理员用户更改密码。

更新

admin_user_password_change?方法可能是这样的:

def admin_user_password_change?
  unless self.admin? && self.password.present? && self.password_confirmation.present?
    self.errors.add(:admin_password_change, "password and password_confirmation are required.")
  end
end

至于它将如何与控制器通信?,它不会直接。 但是,如果方法中的任何条件为假(例如 self.admin? && self.password.present? && self.password_confirmation.present? ),错误将添加到 User 的实例中,并且该实例不会保存在控制器中。

将某些字段设置为新值不会取消设置其他字段;仅仅因为您只在一个操作中更新某些字段并不意味着其他字段将被取消设置,只要它们以一致的状态启动。

只需添加您的验证即可。它会正常工作。

您只能使用以下方法告诉某些cenarios上的验证工作:

创建:

validates :first_name, :last_name, :username, presence: true, on: :create

更新:

validates :password, presence: true, on: :update

看看继续。

有关基于上下文的验证,请查看上下文验证

最新更新