我试图弄清楚这里最好的路径,之前的一个问题并没有对这个问题有所了解,但这可能是由于我的解释,所以我要尝试将其分解成更小的块以希望收集一些在用bitesized块学习的同时更多地了解这个问题
适用范围
足球预测应用程序,用户在即将到来的游戏中对得分进行预测。根据他们是否已正确预测,他们将获得一些积分。每个用户都可以创建一个团队,然后成为联盟的一部分。
当前模型
class User
has_many predictions #prediction model has user_id as FK
has_many :teams #team model has user_id as FK
attr_accessible :prediction_id
end
class Team
belongs_to :user
attr_accessible :team_name, :user_id, :key
end
class Prediction
has_many fixtures #to allow predictions from multiple users<br>
attr_accessible :home_team, :away_team, :home_score, :away_score, :fixture_date, :fixture_id, :user_id
end
class Result
attr_accessible :home_team, :away_team, :fixture_date, :home_score, :away_score
end
我的问题是,我应该有一个单独的模型,例如指向存储从用户预测中获得的积分吗?因此,例如,如果用户正确地预测得分,则他们将被给予3分。
在Point
模型中,我将拥有属性
result_id, prediction_id, allocated_points
所以在这里我可以将预测与结果进行比较并分配点数。
任何值得赞赏的建议都非常难以理解。
答案 0 :(得分:0)
我不认为这有正确/错误的答案。很难说没有看到每个模型的分析和属性,但我会从计算他们的观点开始:
class Predication
def correct?
fixture.result == result
end
end
class User
def points
predications.select(&:correct?).size * 3
end
end
class Team
def points
users.map(&:points).inject(&:+)
end
end
答案 1 :(得分:0)
我相信Point不应该是一个模特。它应该是用户表中的一列。 您应该根据预测和结果计算点,并更新相关用户的点。
但这只是我的观点,我可能完全错了。