2011-01-21 51 views
0

假設我有一個產物,其由兩個部分組成,組分A的X數量,和組分B.不同的組件,不同的數量,不同的規則......太多了!

Y的數量當我在形式或對其進行編輯的用戶選擇它,我帶來的默認數量,但我需要允許用戶將X編輯爲他們喜歡的任意數字,但是如果他們選擇這樣做,我需要更新我的Y數量,以便始終爲他們選擇的新X的兩倍。

這是業務規則如何查找此產品。還有許多其他產品,每個產品都有自己的組件數量和相互關聯的數量。隨着規則的變化經常發生(並且有很多),最好的辦法是什麼?

有人建議在服務器端使用JSON進行驗證,但我對此很陌生,我需要一些簡單的例子,至少讓我繼續討論服務器如何處理這個問題以及它如何看待喜歡。

我欣賞任何建議!

回答

0

我不認爲你需要任何服務器驗證,直到用戶實際上按下保存或更新或其他。爲用戶呈現表單時,請包含一些處理規則的簡單js函數。

因此,如果用戶更改X qty的值,則將Y qty設置爲通過onChange或onBlur事件(所有客戶端)的兩倍。然後,當用戶將數據發佈到服務器時,通過模型中的某個自定義驗證回調來檢查數量是否有效,如果不是,則會引發錯誤。

這裏只是一個模型的例子:

class Product < ActiveRecord::Base 
    X_Y_RATIO = 2 

    validate :x_y_ratio 

private 
    def x_y_ratio 
    (self.y_qty/self.x_qty) == X_Y_RATIO 
    end 
end 

因此,如果x_y_ratio方法返回false,那麼該產品將不會被保存。

+0

感謝您的回答!我認爲它應該在服務器端完成的原因很簡單,因爲規則太多,而且他們經常變化。因此,如果我需要改變某些內容,將它們留在應用程序中會有點難以管理。理想情況下,只有一些字段是可編輯的,比如X數量,如果用戶這樣做了,那麼我會自動更新Y來增加一倍。如果產品有一些規則,我甚至會考慮將每個函數的js文本存儲在數據庫中。當你帶來產品時,它會帶來這個「規則」字段,帶來文本,並以某種方式將其轉換爲實際代碼進行驗證。 – Lievcin 2011-01-21 07:29:43