问题描述
我有带有 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