我在验证时遇到了一个非常棘手的问题。基本上,我有一个连接模型screen_weights,带有一个名为“weight”的额外属性。连接模型适用于两种模型:分数和屏幕。
屏幕has_many:得分=>:screen_weights
得分has_many:屏幕截图=>:screen_weights
然后根据体重对我的分数进行称重。
让我说我有
screen_id = 1,score_id = 1,重量= 0.3;
screen_id = 1,score_id = 2,体重= 0.7。
通过这种方式,我将拥有一些屏幕1,它有两个分数(1和2),分别为0.3和0.7。需要进行的验证总和为1。 如果分数的权重加到1,我将需要检查特定的屏幕。我将如何实现这一目标? SELECT SUM(权重)FROM screen_weights GROUP BY screen_id可以给我这个信息。但是我怎么能为它编写验证呢? 非常感谢
答案 0 :(得分:3)
class Screen
has_many :screen_weights
validate :weights_sum_to_1
def weights_sum_to_1
errors.add_to_base("Weights must add up to 1") unless screen_weights.sum(:weight) == 1
end
end
我认为这就是你想要的,但是从你对这个问题的解释来看,很难确切知道这些课程的作用。