I have Product model with price field and product_prices nested fields. I would validate the presence at least one of two and I would reject the presence of nested fields if price field is not blank. Here my Product model:
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
and my ProductPrice model:
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
Someone can help me please?
You can do with with a custom validation method.
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