タイトルの謝罪として、私の問題を簡潔に説明する方法がわかりません。ActiveRecordは、独自の一意性と最大列の値に基づいて選択します。
データベースにname
,year
、version
の複数のインスタンスがあるとします。以下の例:
| id | name | year | version |
|----|-----------|--------|---------|
| 1 | Blockhead | 2010 | 1 |
| 2 | Blockhead | 2010 | 2 |
| 3 | Jughead | 2011 | 1 |
私は唯一の名前と年がユニークな結果を返しますが、それだけで名/年の一意の組み合わせの最新バージョンを返すようにしたいです。
| id | name | year | version |
|----|-----------|--------|---------|
| 2 | Blockhead | 2010 | 2 |
| 3 | Jughead | 2011 | 1 |
を私がグループ化されたデータセットを持っていたいのですが...しかし、SQL/ARの私の知識はこの点に限定されていると私は何を適切分からない可能であれば:つまり、私は返すようにしたいです解決策になるでしょう。私は現在、すべてのレコードを取得し、私が望んでいないものを除外しますが、それは控えめな解決策です。
@items = ::Item.active.paginate(per_page: 30, page: page || 1).to_a
# Do not show a given item unless it's the latest version
@items.delete_if do |item|
@items.any? do |other|
other.id != item.id &&
other.read_attribute(:name) == item.read_attribute(:name) &&
other.year == item.year &&
other.version > item.version
end
end