Defect #11170
Topics sort order is broken in Redmine 2.x
| Status: | Closed | Start date: | ||
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | Jean-Philippe Lang | % Done: | 0% | |
| Category: | Forums | |||
| Target version: | 2.0.3 | |||
| Affected version: | 2.0.2 | Resolution: | Fixed |
Description
Because of Rails 3 by default uses order from has_many :order statement before any defined order, messages are always sorted by creation time first regardless of sticky attribute.
To fix it, line 46 in file app/controllers/boards_controller.rb
@topics = @board.topics.find :all, :order => ["#{Message.table_name}.sticky DESC", sort_clause].compact.join(', '),
:include => [:author, {:last_reply => :author}],
:limit => @topic_pages.items_per_page,
:offset => @topic_pages.current.offset
should be changed to
@topics = @board.topics.reorder(["#{Message.table_name}.sticky DESC", sort_clause].compact.join(', ')).all(
:include => [:author, {:last_reply => :author}],
:limit => @topic_pages.items_per_page,
:offset => @topic_pages.current.offset)
Associated revisions
Fixed that sticky messages are not displayed first (#11170).
History
#1 Updated by Etienne Massip about 1 year ago
Why not move the sort order to the has_many association declaration in source:/tags/2.0.2/app/models/board.rb#L21?
#2 Updated by Vitaly Klimov about 1 year ago
Etienne Massip wrote:
Why not move the sort order to the
has_manyassociation declaration in source:/tags/2.0.2/app/models/board.rb#L21?
I am not sure why topics are sorted by creation time by default, but if it is does not matter - then yes, moving sticky sort order to association will simplify things a bit.
#3 Updated by Jean-Philippe Lang about 1 year ago
- Status changed from New to Resolved
- Assignee set to Jean-Philippe Lang
- Target version set to 2.0.3
- Resolution set to Fixed
Fixed in r9836, thanks for pointing this out.
We do not always want the messages in the same order (eg. board display vs. atom feed), so having this handled by the association sort order is not a better solution.