【问题标题】:Filtered results by params按参数过滤的结果
【发布时间】:2013-01-13 21:47:42
【问题描述】:

我正在学习 Rails 并尝试以正确的方式做到这一点,但我一直在努力寻找解决方案。

我的排名模型中有一个很长的体育排名列表,我试图根据应用到它的过滤器和一般业务逻辑(即日期范围、运动等)来操纵这些排名。

排名模型

t.string   "rank"
t.integer  "team_id"
t.integer  "sport_id"
t.integer  "source_id"

团队模型

t.string   "team"
t.integer  "sport_id"

运动模特

t.string   "sport"

例如,我想做的一件事是找到每个团队多年来的平均排名。我知道这样做的一种方法是 Ranking.average(:rank, :group => 'team_id'),但这似乎不是很干。

我的另一个想法是创建一个数组、哈希、json,甚至是一个临时表(可能不是一个好主意),以便我更轻松地应用计算和操作数据。

再一次,我还是有点绿,所以我可能会错过一个简单的解决方案,但最好的做法是什么?

【问题讨论】:

  • “看起来不太干” - 你确定你知道干的意思吗?
  • 我认为您找到了一个很好的解决方案。
  • @SergioTulentsev 我知道我可能没有把这个问题说得最好,似乎有比我正在做的更好的解决方案。

标签: ruby-on-rails model polymorphism business-logic


【解决方案1】:

这似乎是开发人员不应该害怕使用原始 SQL 的情况之一。查询界面很好,但有时你需要全力以赴。

SELECT team_id, AVG(rank)
FROM rankings
GROUP BY team_id

像这样使用它:

team_ranks = ActiveRecord::Base.connection.execute(sql)

(免责声明:我对 ActiveRecord 不是很精通。我是一个 mongodb 人。也许有一个内置的方法)

【讨论】:

  • 我可能不得不走那条路(我更精通 SQL)。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2016-11-02
  • 2015-03-23
  • 2023-04-11
  • 2021-11-21
  • 2021-11-26
相关资源
最近更新 更多