QA #1148
未完了バージョン選択時の表示順番を調整したい
0%
説明
■現象/要望¶
チケットのバージョン選択時の表示順番を調整したい。
対象バージョン欄は、作業中バージョン(未完了)だけなので、選択時の問題は少ないが、
発見バージョン(カスタムフィールドのVersion)は、長期間の運用で選択肢が大量になり、誤認し易い。
名称?作成?順に表示されるようだが、表示順番を逆にできないか。
■解決策¶
app/models/version.rbの def <=>(version) を変更することで、ある程度修正可能(バージョン選択/ロードマップ表示順序一括)。
現状(Redmine4.1時点)¶
・期日が前のバージョンから表示
期日未設定の場合、バージョン名称の昇順
バージョン名称も同一の場合は、バージョンIDの昇順(古いものが先に表示される場合が多い)
この表示順序は、JPLが意図して設計したもの
Version numbering sort
https://redmine.org/issues/6881#note-2
Jean-Philippe Lang が9年以上前に更新 Versions are sorted by date then by name (alphabetically), so what you describe is not a defect (1.1 < 1.10 < 1.2 is alphabetically correct). What you expect is some kind of version numbering sort when names looks like x.y where x and y are integers.
筆者の考え¶
・対象バージョンの場合、期日優先の表示は意味があるが、発見バージョンの場合、期日優先に表示することは無意味。
・発見バージョンは大量になるため、単純にバージョン名称でソートした方が選択し易い。
・新しく定義したバージョンを先に表示/選択可能とする方が、必要なバージョンを選択する時間を短縮できる。
暫定対策¶
期日の無視/優先表示により対処が異なる。
この順番は、ロードマップ、対象バージョン、発見バージョン共に影響する。
期日を無視し、バージョン名、バージョンIDの降順のみでソートする。
(文字列大きい方が新しい場合が多いため)
# Versions are sorted by effective_date and name
# Those with no effective_date are at the end, sorted by name
def <=>(version)
-1 * ( name == version.name ? id <=> version.id : name <=> version.name)
end
期日指定バージョン優先、バージョン文字列は降順(文字列大きい方が新しい場合が多いため)
変更点:名前・バージョンIDの大小関係判定時に符号変えただけ(下記、-1 * の2か所)
app/models/version.rb
# Versions are sorted by effective_date and name
# Those with no effective_date are at the end, sorted by name
def <=>(version)
if self.effective_date
if version.effective_date
if self.effective_date == version.effective_date
-1 *(name == version.name ? id <=> version.id : name <=> version.name)
else
self.effective_date <=> version.effective_date
end
else
-1
end
else
if version.effective_date
1
else
-1 *(name == version.name ? id <=> version.id : name <=> version.name)
end
end
end
■対応状況¶
パッチ作成済