2011-01-21 50 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