这是第一次接近这样的事情,所以我正在寻找一些建议/最佳实践来实现我的目标。我想为用户做出的预测结果分配一个值(分数)。所以在我的情况下,用户可以对足球赛程进行预测,如果他们猜对了,那么他们可以说是 3 分。
到目前为止我有
class Fixture < ActiveRecord::Base
attr_accessible :home_team, :away_team, :fixture_date, :kickoff_time, :prediction_id
has_many :predictions
end
class Prediction < ActiveRecord::Base
attr_accessible :home_team, :away_team, :home_score, :away_score, :fixture_date, :fixture_id, :user_id
has_many :fixtures
end
class Result < ActiveRecord::Base
attr_accessible :home_team, :away_team, :score, :fixture_date
end
class User < ActiveRecord::Base
attr_accessible :prediction_id
has_many :predictions
end
class Point < ActiveRecord::Base
attr_accessible :result_id, :score, :user_id, :prediction_id
end
所以我目前的想法是我可以在 Point 模型中进行一些比较,因为我可以访问预测和结果?也许是一个 case 语句,以便当预测和结果匹配时分配值 3。然后我可以将该值保存到 Point 模型。
我在想的第二个选项是更新 Point 模型的 rake 任务
我现在可以看到的一个问题是预测分数是使用单独的值分配的,即 home_score 和 away_score 作为整数,结果分数存储为一个字符串,即 2-2。这由我抓取的方式控制数据。
有更多经验的人将如何处理这个?,希望在这里学习一些东西。
任何建议表示赞赏
谢谢
编辑
我想出了这个,虽然可能非常错误,这就是我如何看待逻辑?
def points_total
points = case
when predition.home_score && prediction.away_score == result.home_score && result.away_score
self.score = 3
when prediction.home_score == result.home_score || prediction.away_score == result.away_score
self.score = 1
when prediction.home_score != result.home_score && prediction.away_score != result.away_scor
self.score = 0
end
end
def allocate_points
points_total
Point.create!(points: score)
end
关于将分数字符串分成两个整数,可以这样做
left, right = "4x3".split("x").map(&:to_i)
所以在我的情况下会是
home_result, away_result = Result.score.split("x").map(&:to_i)
我收集点点滴滴试图弄清楚这一点,但甚至不确定是否朝着正确的方向前进