如果 Rails 表单中的另一个字段为空,则验证嵌套字段
Posted
技术标签:
【中文标题】如果 Rails 表单中的另一个字段为空,则验证嵌套字段【英文标题】:Validates nested fields if another field is blank in rails form 【发布时间】:2020-12-23 13:51:17 【问题描述】:我有带有 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
有人可以帮帮我吗?
【问题讨论】:
【参考方案1】:您可以使用自定义验证方法。
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
【讨论】:
非常感谢!它完全符合我的预期。以上是关于如果 Rails 表单中的另一个字段为空,则验证嵌套字段的主要内容,如果未能解决你的问题,请参考以下文章