如何在 Rails 中验证多态场关联?

how to validate a polymorphic field association in rails?

提问人:Samuel D. 提问时间:12/20/2022 最后编辑:Samuel D. 更新时间:12/23/2022 访问量:178

问:

问题是,我有一个客户和地址模型,如下所示:

class Customer < ActiveRecord::Base
  has_one :address, as: :addressable
end

class Address < ActiveRecord::Base
  belongs_to :addressable, polymorphic: true
end

我有一个客户表单,其中包含渲染地址信息,例如:

# customers/form   
  = f.input :name
  ...
  # render form/address
  = f.input :apto
  = f.input :city
  = f.input :references

我正在寻找的是验证客户表单中的地址字段,如果用户没有输入任何值,那么它会阻止其创建或更新

pdd:地址实体是多态的,我可以在任何关系中使用它。但是当我以其他关系的形式使用它时,我不知道如何验证它的字段

如果您能帮助我,我将不胜感激,非常感谢您抽出宝贵时间阅读我。

更新 22/12/2022

我想专门验证仅在客户中而不是在其他实体中的地址字段(apto、city、reference)

由于任何其他实体都可以使用地址,并且在这些实体中,字段必须无需验证

非常感谢@max推荐validates_associates,但它会验证所有地址

Ruby-on-Rails Ruby 验证简单 形式的 多态关联

评论

2赞 max 12/21/2022
你会使用 validates_associated - 多态关联是无关紧要的,因为它适用于任何类型的关联。
0赞 Samuel D. 12/23/2022
谢谢@max但它验证了与地址相关的字段,只有我才寻找它来验证客户端中的地址字段 客户端 -> 地址(验证字段为城市、参考、apto) 用户 ->地址(不验证字段) 文章 ->地址(不是验证字段)

答:

3赞 saviu-u 12/23/2022 #1

也许您正在寻找:

validate :validate_fields, if: -> { addressable_type == 'Customer' }

评论

1赞 Samuel D. 12/23/2022
它帮助了我@saviu-u,非常感谢您抽出宝贵时间并:D提供帮助。pdd:我将最大解决方案“validates_associated”与addressable_type混合以验证特定字段