gpt4 book ai didi

ruby-on-rails - 在模型或 Controller 中计算

转载 作者:行者123 更新时间:2023-12-04 07:28:34 24 4
gpt4 key购买 nike

我正在开发一款减肥应用。为此,在我的应用程序中,每个用户 has_one :profilehas_many :weights。每个配置文件 belongs_to :pal。为了让我的应用程序正常工作,我需要一个名为 SMR 的值,它基本上是一个公式,它将用户的大小、年龄和性别(全部来自配置文件表)、用户的当前体重(来自权重表)以及来自的 float 作为变量 friend table 。

我能够在 profiles_controller.rb show action 中计算 SMR,并将其显示在配置文件 show.html.erb 中。

我现在有两个问题:

  1. profiles_controller.rb show Action 中进行计算是否正确,还是应该在 profile.rb 模型中进行?如果我应该在模型中这样做:我该怎么做(代码应该是什么样子)?
  2. 稍后在我的应用程序中我将需要 SMR 值作为其他计算的变量。我如何才能实现这一目标(如果它是在配置文件 Controller /模型中计算的,但稍后在其他地方需要)?

我是 Rails 世界的新手,所以我的问题可能真的是菜鸟问题。

profile.rb

class Profile < ActiveRecord::Base
belongs_to :user
belongs_to :pal
belongs_to :goal


def age
if birthdate != nil
now = Time.now.utc.to_date
now.year - birthdate.year - (birthdate.to_date.change(:year => now.year) > now ? 1 : 0)
else
nil
end
end
end

weight.rb

class Weight < ActiveRecord::Base
belongs_to :user
end

pal.rb

class Pal < ActiveRecord::Base
has_many :profiles
end

profiles_controller.rb(仅显示操作)

  def show
@pal = @profile.pal
@goal = @profile.goal
@current_weight = Weight.where(:user_id => current_user.id).order(:day).last

if @profile.gender == 0
@smr = (10*@current_weight.kilograms+6.25*@profile.size-5*@profile.age+5)*@pal.value
elsif @profile.gender == 1
@smr = (10*@current_weight.kilograms+6.25*@profile.size-5*@profile.age-161)*@pal.value
else
nil
end
end

最佳答案

我认为你应该创建一个单独的类或者你也可以在配置文件模型上做

class SmrCalculator
def initialize(profile, user)
@profile = profile
@user = user
end

def get_smr
@pal = @profile.pal
@goal = @profile.goal
@current_weight = Weight.where(:user_id => @user.id).order(:day).last

if @profile.gender == 0
@smr = (10*@current_weight.kilograms+6.25*@profile.size-5*@profile.age+5)*@pal.value
elsif @profile.gender == 1
@smr = (10*@current_weight.kilograms+6.25*@profile.size-5*@profile.age-161)*@pal.value
else
nil
end
@smr
end

end

然后像这样在您的 Controller 显示方法上调用此类:

@smr_calculator = SmrCalculator.new(@profile, current_user)
@smr = @smr_calculator.get_smr

并将这个类作为 smr_calculator.rb 添加到模型文件夹中

所以在应用程序的任何地方你都需要@smr 你可以用配置文件和当前用户调用这个类

关于ruby-on-rails - 在模型或 Controller 中计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37577715/

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