如何复制活动资源::错误对象



我正在对base_user执行操作。我希望我的@user的错误与base_user的错误相同,因为我最终将这些错误显示为视图中的横幅。但是,我不知道如何设置@user的错误。这是我正在做的事情:

  base_user.validate_password_change(params)
  if base_user.errors.size > 0
    #@user.errors.initialize_dup(base_user.errors) # does not work
    @user.errors = base_user.errors.dup # does not work
    raise 'Validation Errors' if @user.errors.size > 0
  end

@user.errors是一个空哈希。 base_user.errors.messages 是一个哈希,其中包含一个名为 password 的数组,其中包含元素(密码格式不正确的原因字符串)。根据ActiveResource API,ActiveResource::Error对象可以执行from_arrayfrom_hash(未在API中列出,但我在代码中看到它),from_jsonfrom_xml,但它没有初始化或setter。

我正在使用Ruby 2.0和Rails 4.0.0,它们使用ActiveResource 4

ActiveResource::Errors

继承自 ActiveModel::Errors。

您可以通过枚举 base_user 的属性来覆盖 @user 实例上的错误:

base_user.errors.each do |name, value|
  @user.errors.set(name, value)
end

您可能需要考虑两个对象都有错误的情况,并且用另一个对象覆盖一个对象可能不合适。

最新更新