代码之家  ›  专栏  ›  技术社区  ›  JRL

如何使对象A在其HAS-A对象B未通过验证时失败验证

  •  0
  • JRL  · 技术社区  · 15 年前

    我有一个包含创建产品对象的数据的表单。产品与这样的图像有关系:

    has_one :image
    

    在我的视图中,我有一个这样的文件输入:

    <%= f.file_field :image_file %>
    

    在我的产品模型中,我有:

      def image_file=(input_data)
        self.image = Image.new({:image_file => input_data})
      end
    

    图像模型知道如何处理输入的数据,并具有验证规则。 问题是,如果验证失败,我的产品将在没有图像的情况下创建。

    如何使验证错误回跳到产品上,这样产品就不会被创建,所以我可以在表单上显示错误?

    因为我刚接触Rails,如果我做错了,请告诉我。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Gareth    15 年前

    你可以用 validates_associated 为此

        2
  •  0
  •   JRL    15 年前

    最后我创建了一个自定义验证器:

    validate :associated_image
    

    方法如下:

    def associated_image
      if image && !image.valid?
        image.errors.each { |attr, msg| errors.add(:image_file, msg)}
      end
    end
    

    感谢加雷斯指点我 validates_associated 但问题在于,您会丢失来自关联对象的实际错误消息。