Rails:具有嵌套属性的唯一验证

时间:2020-01-24 07:04:44

标签: ruby-on-rails ruby

Table 1 - Product

has_many :widget_groups
accepts_nested_attributes_for :produts_widget_groups

validates_uniqueness_of :name, on: :create,
                                     if: proc { |product| product.has_category? }

Table 2 - ProductsWidgetGroup

belongs_to :product
belongs_to :widget_group
has_many :products_widget_group_deatils

Table 3 - ProductsWidgetGroupDetail

belongs_to :products_widget_group
belongs_to :product
accepts_nested_attributes_for :product

我有一个表单,用于将产品保存在(表1)中,并发送表2和表3的嵌套属性。

在这里,我尝试将要保存的产品的唯一名称验证放入表3中,但是我对此有一些疑问。

我需要获取表1的产品对象的模型验证错误消息,然后才可以在叶端显示错误。但是,这里的验证错误消息将转到表3的产品对象。无论如何,我们可以实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

有了这个,您会得到一个:product=>["is invalid"],我认为这不是您想要的:

class ProductsWidgetGroupDetail
  validates_associated :product

但是您也可以尝试以下方法:

class ProductsWidgetGroupDetail
  validates :product_validation

  private

  def product_validation
    @errors.merge!(product.instance_variable_get(:@errors))     
  end