如果另一个字段在 rails 表单中为空,则验证嵌套字段
Validates nested fields if another field is blank in rails form
我有 Product 模型,其中包含 price 字段和 product_prices 嵌套字段.
我将至少验证两者之一的存在,如果 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
我有 Product 模型,其中包含 price 字段和 product_prices 嵌套字段. 我将至少验证两者之一的存在,如果 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