如何解决如果另一个字段在Rails表单中为空,则验证嵌套字段
我有带有 price 字段和 product_prices 嵌套字段的 Product 模型。 如果 price 字段不为空,则我将至少验证两个字段之一的存在,并拒绝嵌套字段的存在。 这是我的产品模型:
class Product < ApplicationRecord
belongs_to :model
belongs_to :category
belongs_to :sub_category
validates :name,:model_id,:image,presence: true
validates :name,uniqueness: true
has_many :product_prices
accepts_nested_attributes_for :product_prices,:allow_destroy => true
mount_uploader :image,ImageUploader
end
# == Schema information
#
# Table name: products
#
# id :bigint(8) not null,primary key
# name :string(255)
# model_id :integer
# category_id :integer
# sub_category_id :integer
# image :string(255)
# price :float(24)
# created_at :datetime not null
# updated_at :datetime not null
# user_id :integer
和我的 ProductPrice 模型:
class ProductPrice < ApplicationRecord
belongs_to :product
end
# == Schema information
#
# Table name: product_prices
#
# id :bigint(8) not null,primary key
# product_id :integer
# from :integer
# to :integer
# price :float(24)
# created_at :datetime not null
# updated_at :datetime not null
有人可以帮我吗?
解决方法
您可以使用自定义验证方法。
class Product < ApplicationRecord
has_many :product_prices,optional: true
validate :need_price
private
def need_price
if price.present?
errors.add(:price,'not allowed if a product price is given') if product_prices.present?
else
errors.add(:price,'need price or add a product price') if product_prices.empty?
end
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。