我在为一些数据建模时遇到了麻烦。我不确定是否应该使用多态关系,多个模型或对数据进行非规范化。
我想记录练习的“日志”。我也想记录我的饭菜“日志”。
所以,如果我录制一套卧推,我会记录重量/代表。我也可以记录我的膳食的宏,所以300卡路里,5卡路里,5脂肪。
这应该是一个名为“Log”的模型吗?
Log =>重量/代表/卡路里/碳水化合物/脂肪
它可能记录的不仅仅是练习的重量。潜在距离也是如此,因此您也可以为该模型添加距离和持续时间。
最重要的是,如果要记录他们的膳食,应该记录什么样的型号与饮食相关?
摘要:用户应该能够记录他们执行的练习日志,其中包括代表,体重,距离和持续时间。用户还应该能够在他们吃饭的整天记录他们的宏。是否应该有一个常见的日志模型?
澄清:锻炼是一系列练习。练习就像跑步或卧推。
答案 0 :(得分:0)
就我个人而言,我宁愿它们分开,所以代码非常清晰。
用餐使用用户
的belongs_to练习使用用户&&的belongs_to的锻炼强>
使用用户 的belongs_to锻炼
练习将包含
weight
reps
distance
duration
因此,它将涵盖基于时间的距离元素,如骑自行车或慢跑以及重量和代表
让您轻松检索&使用
创建新数据user.meals && user.meals.build
workout.exercises && workout.exercises.build
答案 1 :(得分:0)
如果你所做的只是从其他模型计算属性,我不明白拥有Log模型的意义。所以我会这样设置:
Class User
# t.integer :weight (or if this can change regularly make this an attribute of meal and exercise so it's calculated and is logged specifically for those things)
has_many :meals
has_many :workouts
has_many :exercises, through: :workouts
class Meal
# t.integer :carbs
# t.integer :calories
# t.integer :fat etc
belongs_to :user
class Workout
belongs_to :user
has_many :exercises
class Exercise
# t.integer :reps
# t.integer :duration
# t.integer :distance
# t.integer :barbell_weight etc
belongs_to :workout
那么这些模型本质上就是日志,如果你想记录“基于用户体重的卡路里燃烧”等信息,那么你可以根据计算动态创建“日志”类型的电子表格。如果你想知道每顿饭/运动的这种计算,那么我会将用户体重作为用餐的属性和运动/锻炼,这样你就可以知道在用户一年的健身体制中在特定时间燃烧了多少卡路里
根据评论编辑:
class User
has_many :logs
class Log
belongs_to :exercise
belongs_to :user
如果您还想以类似的方式跟踪膳食日志(例如,膳食与为其记录的信息非常不同)。然后我会做一个多态的。但实际上,这非常适合您的情况,因此您最了解自己的应用,并且需要做出决定。