Как мне продублировать объект 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
Возможно, вам придется рассмотреть случай, когда у вас есть ошибки в обоих объектах, и перезапись одного другим может быть нецелесообразной.