2011-01-28 10 views
0

比方說,我有一個記錄類Person與整數字段awesomeness如何攔截ActiveRecord對象的批量分配散列並對其進行過濾?

如果我撥打Person.new(:awesomeness => 5),它工作正常。

如果我按照預期撥打Person.new(:awesomeness => 'five'),Rails會確定'five'是一個整數並且失敗,所以它只是默認爲0。我可以通過攔截散列並以某種方式處理數據來進行干預嗎?

ActiveRecord回調中最早的「事件」是before_save,「five」已經成爲0

我明顯可以做這個控制器端,但這似乎是嚴格屬於模型作爲過濾器的東西。

回答

2

我會說這實際上屬於控制器。

控制器的工作是解釋模型和視圖之間的數據和交互。如果模型聲明一個字段是一個整數,那麼只需要模型邏輯來處理以整數形式給出的數據。

我假設這個「五」來自視圖,在這種情況下,它應該是控制器的工作,以正確處理數據,以便它可以被模型理解。

+0

感謝您的理由充分的論據。我的直覺是把這個模型放在DRY模型中,但我同意你對這種情況的高級評估。在`before_filter:preprocess_phone_number,:only => [:create,:update]`中寫入並不難。 – 2011-01-28 20:58:57

相關問題