gpt4 book ai didi

ruby-on-rails - Rails - 跳过子类的 rails 验证

转载 作者:行者123 更新时间:2023-12-03 13:30:36 26 4
gpt4 key购买 nike

我有一个用户类和一个联系人,其中联系人是用户的子类。这两个类都存储在用户表中。

我的联系人可能有也可能没有电子邮件地址,而我的用户需要一个电子邮件地址(我的用户模型定义中有 validates_presence_of :email)。

我的理由是联系人是由用户输入的,以后可能会在他们声明其个人资料时成为用户。

  • 首先,可以定义我的
    用户和联系人我这样做的方式?
  • 二、如何跳过validate_presence_of email在我的联系人模型中进行验证?

  • (我在 Rails 2.3.8 上)

    谢谢!

    更新:
  • 似乎单表继承是
    专为满足我的需要而设计
  • 跳过验证的正确方法
    我的联系人的电子邮件的存在
    表格如下:
  • validates_presence_of :email, :unless => Proc.new {|user| user.type == "Contact"}

    最佳答案

    听起来您应该将 User 和 Contacts 抽象为两个表,而不是尝试将它们合并为一个表。尽管联系人可以成为用户,但这并不意味着他们会(我认为?)。

    这也可以解决您的 validate_presence_of :email问题,因为联系表/模型甚至没有该字段。我相信,这也将在以后缓解潜在的性能问题。您不希望通过大量联系人来查找注册用户。

    但是,如果您一心想在一张 table 上做这件事,我相信您可以执行以下操作:
    validates_presence_of :email, :unless => Proc.new {|user| user.type == "Contact"}
    这是假设您有一个 user_type 列,但您可以根据您如何确定 User 来替换它。是 Contact .

    更新 :

    这是您正确验证模型的方法:删除 validates_presence_of从模型中并将其放置在此 block 内:

    with_options :unless => :user_type == "contact" do |user|
    user.validates_presence_of :email
    end

    关于ruby-on-rails - Rails - 跳过子类的 rails 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5773356/

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