我目前正在尝试组建一个模型结构来执行各种计算,其公式将存储在模型中。
目前,我有一个操作数模型,它通过多对多与操作模型连接。只要我总能进行简单的计算(即没有中间步骤),这种方法就可以正常工作。
我遇到问题的是,如果我需要(例如)从另一个操作的结果中减去一个操作的结果。我知道我可以使用第二个模型来执行操作计算,但是我会在链中进一步遇到同样的问题(即如果我需要对计算结果执行操作)。
因此,我所需要的本质上是一种嵌套操作的方法 - 即操作可以将操作数作为操作数模型的正常操作数或另一操作的结果。有没有办法让操作模型基本上像这样自我引用?
谢谢!
答案 0 :(得分:1)
这实际上更像是一个对象建模问题,而不是一个rails问题 - 如果不更详细地了解域模型,我不确定我能帮到很多。
但是当我考虑计算器以及我如何看待简单的操作/操作数编程工作时,我看到过一些可能有用的模式:
您是否有“当前结果”模型在执行每个操作后存储结果?我认为每个操作都可以在'当前结果'模型上执行,它可以存储当前结果。
我也看到过将'寄存器'的概念用作中间结果的临时存储的情况。例如,“存储到寄存器1”本身就是一种操作。如果你在'register'对象开发,你可以将结果存储到中并从中获取(或者甚至可以执行操作并将结果保留在寄存器中),这可能会有所帮助。
这在您的域名中是否有意义?
答案 1 :(得分:0)
我不知道我是否理解你的问题,但在我看来你想在保存它之前对属性进行操作。您可以使用super()
来执行此操作。
def attribute=(val)
new_val = #any types of operations on val
super(val)
end