我的Rails應用程序有許多表單。當喬使用我的應用程序時,我希望每個表單都能爲他提供即時視覺反饋,以確定每個字段的輸入是否有效。一個字段檢查他的電子郵件地址的格式 - 非常簡單。但是另一個允許他將當前資源與其他資源相關聯,並且適用複雜的業務規則。如果表單不完整或無效,我想阻止Joe前進,例如禁用「提交」按鈕。在執行AJAX服務器端驗證時保持RESTful?
我可以通過編寫在瀏覽器中進行驗證的JavaScript來複製出現在我的Rails代碼中的驗證。但這種味道很糟糕 - 任何時候商業規則都會改變,我需要在兩個地方用兩種不同的語言和兩套測試來更新它們。
或者我可以添加一個單一的方法到控制器的資源稱爲'驗證'。它將接受AJAX請求中的表單數據,並返回可用於Joe形式的響應,以提供實時驗證反饋。與「創建」操作不同,「驗證」操作不會改變服務器的狀態。 「驗證」的唯一目的是提供驗證響應。
兩難處境是我不喜歡在Rails中向RESTful控制器添加操作。但我更喜歡在兩種不同的上下文中重複驗證代碼的想法。
我注意到this SO question,這涉及到這個問題。但我對插件或技術不感興趣。我也不認爲這個問題必須Rails特定。我更感興趣的是如何在Web應用程序中最好地處理這類問題。
我還注意到this SO question,它不包括維護RESTful體系結構的約束。
鑑於需要在Web應用程序中動態驗證具有複雜業務規則的表單數據,並且希望維護類似REST的服務器體系結構,那麼同時完成這兩項任務的最簡潔,最可維護的方法是什麼?
在正統的REST體系結構中,有些東西沒有意義。不過,達雷爾的回答很不錯。 – gmoore 2010-09-14 17:29:26
vise和Darrel的解決方案都可以工作。 Vise的解決方案假定您已經在處理複雜的業務邏輯的模型中擁有自定義驗證功能,這不是一個錯誤的假設。 Darrel的解決方案更加靈活,但維護成本更高。 – 2010-09-14 19:19:35