Как мне продублировать объект ActiveResource::Error?

Я выполняю операцию на 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_array, from_hash (не указано в API, но я вижу это в коде), from_json, а также from_xml, но он не имеет инициализации или установщика.

Я использую Ruby 2.0 и Rails 4.0.0, который использует ActiveResource 4

1 ответ

Решение

ActiveResource::Errors наследуется от ActiveModel:: Errors.

Вы можете переписать ошибки на @user экземпляр путем перечисления атрибутов base_user:

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

Возможно, вам придется рассмотреть случай, когда у вас есть ошибки в обоих объектах, и перезапись одного другим может быть нецелесообразной.

Другие вопросы по тегам