Ruby on Rails的Noob问题 - 这是我的情况示例:如果我有模型circle
和属性radius
,我在哪里进行circumference
的计算?这是在模型还是控制器中,它看起来如何? circumference
需要访问views
。
另外,我认为我不需要使circumference
属于我的模型/数据库的属性,因为它可以从用户输入radius
派生出来吗? / p>
答案 0 :(得分:14)
计算派生属性的逻辑绝对属于模型。圆周是圆圈本身的属性,而不是您如何在网络界面中呈现它。
为了从任何地方访问圆周,只需在类上定义一个方法,例如:
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
,以确保其准确无误。