解决方法
用于计算派生属性的逻辑绝对属于模型.圆周是圆圈本身的属性,而不是您如何将其呈现在Web界面中.
为了从任何地方访问圆周,只需在类上定义一个方法,如下所示:
require 'mathn' class Circle < ActiveRecord::Base # assume `radius` column exists in the database def circumference Math::PI * 2 * radius end end
由于计算周长很便宜,您可以根据需要进行计算.如果它是涉及更多复杂的计算,你不想多次运行的事情,你可以记录如下:
def circumference @circumference ||= Math::PI * 2 * radius end
这将在首次调用该方法时设置@circumference实例变量,然后在每个后续调用中返回第一次计算的结果.如果你这样做,当半径改变以确保它是准确的时,你需要确保将@circumference设置为nil.