2012-04-08 45 views
0

我有一個ActiveRecord模型,其中包含一個由自定義非ActiveRecord模型(一個簡單的類,有幾個屬性)的數組組成的序列化字段。Ruby on Rails 2.3從窗體參數填充和驗證非AR模型

我試圖找出一種方法來整合人口和每個序列化項目與父模型一起驗證,但無法找到一個優雅的方式來這樣做。

序列化模型「initialize」方法接收一個「屬性」散列,並簡單地用這些散列填充類屬性。這很好,除了當從表單接收數據時,數據是作爲字符串數據而不是實際類型接收的。 ActiveRecord模型知道如何處理這個問題,並且在 模型實例保存到數據庫之前基於模式進行類型轉換。有什麼我可以做的(除了在「初始化」方法中進行類型轉換之外)使行爲與AR模型相似?另外,我試圖使用「Validatable」gem來驗證我的非AR模型,但似乎有驗證,在使用「validates_numericality_of」並且定義數字更大時,不能在那裏定義大於0

有「如果」參數,它可以傳遞給它,但它在執行時numericality檢查之前發生,然後:

validates_numericality_of :price, :if => lambda { self.price >= 0.0 }, :message => "Price must be greater or equal to 0" 

如果我進入了「價內的字符串「字段,當我試圖檢查模型是否有效時,我得到一個異常,因爲」價格「是一個字符串,我試圖比較它到一個數字...

希望它沒關係我在一個線程中問了兩個問題......但他們有點相關。

謝謝

+0

我希望你現在已經解決了這個問題,但是你需要在變量中捕獲模型實例,因爲代碼是在類的上下文中而不是實例的上下文中進行評估的。 – rubish 2012-07-20 22:02:39

回答