2014-02-26 26 views
0

我已經建立了一個數組屬性爲我的模型@users後設置爲「0」。我在模型user.rb serialize :year, Array中做了這個。Rails的數組保存

我在我的控制器中的顯示頁面,首先打印@user,然後更改@user.year。它通過保存@user.year完成。

第一次通過時它打印@user.year它返回一個[]表明該數組爲空。我在保存之前打印陣列並用整數填充,但當我重新加載下一頁時,@user.year已從[]切換到0。任何想法爲什麼這是?

:year是在@user模型的課稅屬性。

def show 
@user = User.find(params[:id]) 
p "print @user" 
p @user 
... 
@user.today_steps = day['summary']['steps'] 
@user.year.unshift(@user.today_steps) 
... 
p @user.year 
    if @user.save(validate: false) 
    p "Updated" 
    else 
    p "Failed to Update" 
    end 
end 
end 

@today_steps並保存,並在下次調用顯示,但year沒有。任何想法爲什麼這是?

+2

什麼數據類型是一年中你的schema.rb – bjhaid

+0

整數 - 但它應序列 – Marcus

回答

1

爲了serialize :year, Array工作,year屬性必須是一個字符串。

Serialize存儲在數據庫中作爲YAML數據[1]。

然而,因爲你的列類型是整數時,YAML正在被保存到數據庫之前被轉換爲整數。由於ruby將字符串轉換爲整數的方式,0是給定yaml輸入的期望值。

y = [1,2,3].to_yaml # => "---\n- 1\n- 2\n- 3\n" 
y.to_i    # => 0 

[1]:除非你指定類實現裝載和卸載

+0

哇,你比你的固定更多的bug曾經知道。還要感謝爲什麼它以這種方式工作的解釋 – Marcus