2014-04-01 59 views
0

我正在對base_user執行操作。我希望我的@user的錯誤與base_user的錯誤相同,因爲我最終將這些錯誤作爲橫幅顯示。但是,我不知道如何設置@user的錯誤。這是我在做什麼:如何複製ActiveResource :: Error對象?

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_jsonfrom_xml,但它沒有初始化或設置器。

我使用紅寶石2.0和Rails 4.0.0,其使用的ActiveResource 4

回答

1

的ActiveResource ::誤差從ActiveModel::Errors繼承。

您可以通過枚舉的base_user屬性覆蓋上@user實例的錯誤:

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

你可能需要考慮,你必須在這兩個對象錯誤的情況下,並覆蓋一個與其他可能不適當。

+0

謝謝!這不是我想做的,但瞭解.set幫助我解決了我的問題。 – Jack