gpt4 book ai didi

ruby-on-rails - 多步 ActiveRecord 的模型验证

转载 作者:行者123 更新时间:2023-12-04 06:18:11 24 4
gpt4 key购买 nike

考虑一个具有以下字段的用户模型:

  • 名字(必填)
  • 姓氏(必填)
  • 电子邮件(必填)
  • 密码(必填)
  • 电话(必填,大小:10 位数字)
  • 地址(必填)

以及包含以下步骤的多步骤注册表单:

  • 第一步,使用 First Name、Last Name 和 Email 字段
  • 第二步输入密码、电话和地址。

您将如何创建一个解决方案来验证每个步骤中的输入?

标准的 ActiveRecord 方法行不通,因为它会同时验证所有字段。

我已经为这个问题创建了一个解决方案,但它的代码很复杂,所以我正在寻找替代方案。

最佳答案

就我个人而言,我会让模型管理它自己的验证,并将用于管理每个步骤的验证的逻辑移至该模型。

现在,这可能不是最优雅的方式,但它很有效并且不会使代码过于困惑。

向模型添加一个step transient 属性。

attr_accessor :step

将以下方法添加到模型中以检查是否在正确的步骤:

def on_step(step_number)
step == step_number or step.nil?
end

step.nil? 的原因 - 这样做的好处是,如果您想在此模型上使用验证而不使用步骤,只需不要为模型和方法上的步骤分配值将允许返回 true 以确保始终执行验证。

将验证更改为仅在正确步骤时处理或在不使用步骤时绕过

validates :first_name, if: "on_step 1", presence: true
validates :last_name, if: "on_step 1", presence:true
validates :email, if: "on_step 1", presence:true

validates :password, if: "on_step 2", presence:true
validates :phone, if: "on_step 2", format:{ with: TEL_REGEX }, allow_blank: false
validates :address, if: "on_step 2", presence:true

当然不要忘记为模型设置当前步骤,例如通过在表单的隐藏字段中对其进行硬编码(如果为每个步骤呈现单独的表单)并更改参数以接收它。

关于ruby-on-rails - 多步 ActiveRecord 的模型验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40578350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com