私は体重減少のアプリケーションを構築しています。これは私のアプリでは各ユーザhas_one :profile
とhas_many :weights
です。各プロフィールbelongs_to :pal
。私のアプリが動作するためには、SMRという値が必要です。これは基本的に、ユーザーのサイズ、年齢、性別(すべてプロフィール表から)、ユーザーの現在の体重(体重表から)、およびフロート番号palテーブル。モデルまたはコントローラの計算
私はprofiles_controller.rb
showアクションでSMRを計算し、show.html.erbプロファイルに表示できます。
私は今、2つの質問があります
- は
profiles_controller.rb
showアクションでこの計算を行うには、それは正しいですか私はprofile.rb
モデルでそれを行う必要がありますか?モデルでそれを行う必要がある場合:どのようにすればいいのですか(コードはどのように見えるでしょうか)? - 私のアプリケーションでは、他の計算の変数としてSMRの値が必要になります。これをどのように達成できますか(プロファイルコントローラ/モデルで計算されたが、後で別の場所で必要になる場合)
私は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(showアクションのみ)
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
あなたの本能は正しいです!モデル内での計算がなく、より理にかなったモデルで行うことも、 'profile'と' current_weigh'を受け取って計算を行うCalculatorクラスを作成することもできます。 「それは後で必要になるかもしれません」に関しては、1日の体重があることがわかります。その重量とその日の計算されたSMRをテーブル自体に保存し、それ以外の場所に照会することができます。 SMRが存在しない場合は、それを計算して保存します。 – lcguida
サービスでcalculatonsを行う –