gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:30:04 25 4
gpt4 key购买 nike

Ruby on Rails 的菜鸟问题 - 这是我的情况的一个例子:如果我有模型 circle 和属性 radius ,我在哪里计算 circumference ?这是在模型中还是在 Controller 中,它看起来如何? circumference 需要在我的 views 中访问。

另外,我认为我不需要将 circumference 作为我的模型/数据库的一部分的属性是否正确,因为它可以从用户输入 radius 派生?

最佳答案

计算派生属性的逻辑绝对属于模型。圆周是圆本身的属性,与您如何在 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 以确保其准确。
def radius=(value)
@circumference = nil
super(value)
end

关于ruby-on-rails - Rails - 我应该在哪里计算派生属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9828607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com