0

私は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"

たとえば、私がやりたいことの 1 つは、長年にわたる各チームのランクの平均を見つけることです。これを行う1つの方法は次のようになることは知っていますRanking.average(:rank, :group => 'team_id')が、それはあまりDRYではないようです。

私が思いついたもう 1 つのアイデアは、計算を適用してデータを簡単に操作できるようにするために、配列、ハッシュ、json、または一時テーブル (おそらく良いアイデアではない) を作成することでした。

繰り返しますが、私はまだ少し緑なので、簡単な解決策を見逃しているかもしれませんが、これのベストプラクティスは何ですか?

4

1 に答える 1

1

これは、開発者が生の SQL にドロップダウンすることを恐れてはならないケースの 1 つと思われます。クエリ インターフェイスは便利ですが、フル パワーが必要な場合もあります。

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

次のように使用します。

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

(免責事項: 私は ActiveRecord にあまり精通していません。私は mongodb 派です。おそらく、このための組み込みメソッドがあるでしょう)

于 2013-01-30T06:27:50.593 に答える