ruby-on-rails – Rails – 我应该在哪里计算派生属性?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails – 我应该在哪里计算派生属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Ruby on Rails的Noob问题 – 这是我的情况的一个例子:如果我有模型圈和属性半径,我在哪里做周长的计算?这将在模型或控制器中,它可能如何看?周长需要在我的意见中可以访问.

此外,我认为我不需要将周长作为我的模型/数据库的一部分的属性,因为它可以从用户输入半径派生?

解决方法

用于计算派生属性的逻辑绝对属于模型.圆周是圆圈本身的属性,而不是您如何将其呈现在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.

猜你在找的Ruby相关文章