我有模型'人類',並且此模型具有整數屬性:年齡。
例如,我使用此整數屬性的驗證:年齡。Rails 3.在表格中留下整數屬性的錯誤值
當我添加新的「人」與錯誤值:年齡(如「2aaa3」)是呈現我回來了錯誤,但它也被切斷:年齡像「2」 。但我不想要它。我想留下最後的錯誤值「2aaa3」。
所以,問題是「我該怎麼做?」
我有模型'人類',並且此模型具有整數屬性:年齡。
例如,我使用此整數屬性的驗證:年齡。Rails 3.在表格中留下整數屬性的錯誤值
當我添加新的「人」與錯誤值:年齡(如「2aaa3」)是呈現我回來了錯誤,但它也被切斷:年齡像「2」 。但我不想要它。我想留下最後的錯誤值「2aaa3」。
所以,問題是「我該怎麼做?」
大家好,我對這個問題感興趣。
我很高興地說我自己創造瞭解決方案。 但我對此有幾點評論。 ))
首先,該解決方案是:
class ApplicationController < ActionController::Base
...
...
after_filter :restore_int_value, :only => [:create, :update]
...
...
private
...
...
def restore_int_value
response.body = response.body.gsub(/(numeric.*<input id=")([^_]*)(_)([^"]*)(.*value=")(\d+)(")/){$1 + $2 + $3 + $4 + $5 + params[$2][$4] + $7}
end
...
...
end
其次,說明有:
1)溶液沿着這樣的寶石如 'Formtastic' 和 'Simple_form' 的工作原理。這些寶石建立在詳細的HTML包裝形式,並給我們使用正則表達式的可能性。 如果你不使用這樣的珍寶,你可以只是包裝你的所有的整數屬性,例如,在以「數字」類「P」標籤像下面,我想我的解決方案會爲這個工作太:
<p class="numeric"> <%= text_field(:human, :age) %> </p>
2)我認爲我的解決方案不適用於多模型形式的嵌套模型的整數域。 (Ryan Bates在「Advanced Rails Recipes」中描述了「在一種形式中處理多個模型」中的這類工作)。 但是,如果您閱讀Ryan Bates的文章,您會看到他已經使用JavaScript。因此,在窗體中使用嵌套模型需要使用JavaScript。然後你可以使用JavaScript進行驗證(就像Kunday所說的)。你不會有問題。 ;) 但是,如果你在表單中有固定數量的嵌套模型,並且不使用JavaScript,那麼我認爲你可以爲你的需求創建新的特定正則表達式(類似於我創建的)。我希望你能用這個來管理。 ;)
我希望我已經涵蓋了所有的情況下,你可以有這樣的問題,我的解決方案將有助於除了我之外的人。 ;)
這是Rails中驗證的默認行爲。不知道是否有其他方式來覆蓋它。但是,您可以使用javascript進行驗證,這將比使用validates_numericality_of更多地體驗用戶體驗。
我知道這是默認的Rails驗證行爲。但我不喜歡它。 JavaScript是很好的解決方案,但只是一個額外的解決方案。如果用戶的瀏覽器沒有啓用javascript支持,我認爲驗證應該在服務器上運行。不過謝謝你的答案。順便說一下,我已經創建了一些解決方案並將其發佈(如果您有興趣)。 – shpakvel 2011-01-22 19:13:36