Skip to content

Conversation

lovro-bikic
Copy link
Contributor

@lovro-bikic lovro-bikic commented Jul 31, 2025

Adds a new cop to register an offense when string arguments to order can be replaced with symbol arguments.

For example, code such as:

User.order('name')
User.order('name DESC')
User.order('name ASC, nickname')

is autocorrected to:

User.order(:name)
User.order(name: :desc)
User.order(:name, :nickname)

The main benefits of the cop are stylistic consistency and removal of table ambiguity when multiple tables have the same column. For example, given models Foo and Bar, this code:

Foo.joins(:bar).select('*').order('id')
# raises ActiveRecord::StatementInvalid: ORDER BY "id" is ambiguous

whereas:

Foo.joins(:bar).select('*').order(:id)
# returns results ordered by 'foos.id' column

String arguments with explicit table names (e.g. order('users.name DESC')) are not registered as offenses in this implementation. Support might be added in a future PR, but I wanted to keep the initial implementation slim for now.


Before submitting the PR make sure the following are checked:

  • The PR relates to only one subject with a clear title and description in grammatically correct, complete sentences.
  • Wrote good commit messages.
  • Commit message starts with [Fix #issue-number] (if the related issue exists).
  • Feature branch is up-to-date with master (if not - rebase it).
  • Squashed related commits together.
  • Added tests.
  • Ran bundle exec rake default. It executes all tests and runs RuboCop on its own code.
  • Added an entry (file) to the changelog folder named {change_type}_{change_description}.md if the new code introduces user-observable changes. See changelog entry format for details.
  • If this is a new cop, consider making a corresponding update to the Rails Style Guide.

@lovro-bikic
Copy link
Contributor Author

Here's the real-world-rails report for this cop (307 offenses):

Report
# bundle exec rubocop ../real-world-rails/apps/{mastodon,dev.to,discourse,gitlabhq,openproject,canvas-lms} --only Rails/OrderArguments

# ~/real-world-rails/apps/mastodon/app/models/session_activation.rb:49:13: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
order('created_at desc').offset(Rails.configuration.x.max_session_activations).destroy_all

# ~/real-world-rails/apps/dev.to/app/controllers/admin/organizations_controller.rb:16:47: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
@organizations.order("created_at DESC")

# ~/real-world-rails/apps/dev.to/app/controllers/sidebars_controller.rb:56:16: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
.order("created_at DESC").limit(30).pluck(:article_id)

# ~/real-world-rails/apps/dev.to/app/controllers/sitemaps_controller.rb:34:27: C: [Correctable] Rails/OrderArguments: Prefer comments_count: :desc instead.
@users = User.order("comments_count DESC")

# ~/real-world-rails/apps/dev.to/app/controllers/sitemaps_controller.rb:38:43: C: [Correctable] Rails/OrderArguments: Prefer published_at: :desc instead.
@articles = Article.published.order("published_at DESC")

# ~/real-world-rails/apps/dev.to/app/controllers/sitemaps_controller.rb:42:25: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
@tags = Tag.order("hotness_score DESC")

# ~/real-world-rails/apps/dev.to/app/controllers/tags_controller.rb:73:32: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
@tags ||= Tag.direct.order("hotness_score DESC").limit(100)

# ~/real-world-rails/apps/dev.to/app/models/user.rb:338:59: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
cached_recent_pageview_article_ids = page_views.order("created_at DESC").limit(6).pluck(:article_id)

# ~/real-world-rails/apps/dev.to/app/models/user.rb:368:63: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
readinglist = Reaction.readinglist_for_user(self).order("created_at DESC")

# ~/real-world-rails/apps/dev.to/app/queries/audit_log/unpublish_alls_query.rb:25:16: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
.order("created_at DESC")

# ~/real-world-rails/apps/dev.to/app/queries/organizations/suggest_prominent.rb:30:16: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
.order("hotness_score DESC").limit(MAX * 2).pluck(:organization_id)

# ~/real-world-rails/apps/dev.to/app/queries/tags/suggested_for_onboarding.rb:16:16: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
.order("hotness_score DESC")

# ~/real-world-rails/apps/dev.to/app/queries/tags/suggested_for_onboarding.rb:23:62: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
@suggested_tags ||= Tag.suggested_for_onboarding.order("hotness_score DESC")

# ~/real-world-rails/apps/dev.to/app/queries/users/suggest_prominent.rb:33:42: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
user_ids = filtered_articles.order("hotness_score DESC").limit(RETURNING * 2).pluck(:user_id) - [user.id]

# ~/real-world-rails/apps/dev.to/app/queries/users/suggest_prominent.rb:39:20: C: [Correctable] Rails/OrderArguments: Prefer score: :desc instead.
User.order("score DESC").limit(RETURNING * 2).ids - [user.id]

# ~/real-world-rails/apps/dev.to/app/services/search/username.rb:57:16: C: [Correctable] Rails/OrderArguments: Prefer has_commented: :desc instead.
.order("has_commented DESC")

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:70:56: C: [Correctable] Rails/OrderArguments: Prefer published_at: :desc instead.
expect(response.body).to include(Article.order("published_at DESC").first.path)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:71:60: C: [Correctable] Rails/OrderArguments: Prefer published_at: :desc instead.
expect(response.body).not_to include(Article.order("published_at DESC").last.path)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:76:60: C: [Correctable] Rails/OrderArguments: Prefer published_at: :desc instead.
expect(response.body).not_to include(Article.order("published_at DESC").first.path)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:77:56: C: [Correctable] Rails/OrderArguments: Prefer published_at: :desc instead.
expect(response.body).to include(Article.order("published_at DESC").last.path)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:82:56: C: [Correctable] Rails/OrderArguments: Prefer published_at: :desc instead.
expect(response.body).to include(Article.order("published_at DESC").first.path)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:83:60: C: [Correctable] Rails/OrderArguments: Prefer published_at: :desc instead.
expect(response.body).not_to include(Article.order("published_at DESC").last.path)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:89:60: C: [Correctable] Rails/OrderArguments: Prefer published_at: :desc instead.
expect(response.body).not_to include(Article.order("published_at DESC").first.path)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:90:60: C: [Correctable] Rails/OrderArguments: Prefer published_at: :desc instead.
expect(response.body).not_to include(Article.order("published_at DESC").last.path)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:109:52: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
expect(response.body).to include(Tag.order("hotness_score DESC").first.name)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:110:56: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
expect(response.body).not_to include(Tag.order("hotness_score DESC").last.name)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:115:56: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
expect(response.body).not_to include(Tag.order("hotness_score DESC").first.name)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:116:52: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
expect(response.body).to include(Tag.order("hotness_score DESC").last.name)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:121:52: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
expect(response.body).to include(Tag.order("hotness_score DESC").first.name)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:122:56: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
expect(response.body).not_to include(Tag.order("hotness_score DESC").last.name)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:128:56: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
expect(response.body).not_to include(Tag.order("hotness_score DESC").first.name)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:129:56: C: [Correctable] Rails/OrderArguments: Prefer hotness_score: :desc instead.
expect(response.body).not_to include(Tag.order("hotness_score DESC").last.name)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:143:53: C: [Correctable] Rails/OrderArguments: Prefer comments_count: :desc instead.
expect(response.body).to include(User.order("comments_count DESC").first.username)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:144:57: C: [Correctable] Rails/OrderArguments: Prefer comments_count: :desc instead.
expect(response.body).not_to include(User.order("comments_count DESC").last.username)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:149:57: C: [Correctable] Rails/OrderArguments: Prefer comments_count: :desc instead.
expect(response.body).not_to include(User.order("comments_count DESC").first.username)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:150:53: C: [Correctable] Rails/OrderArguments: Prefer comments_count: :desc instead.
expect(response.body).to include(User.order("comments_count DESC").last.username)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:155:53: C: [Correctable] Rails/OrderArguments: Prefer comments_count: :desc instead.
expect(response.body).to include(User.order("comments_count DESC").first.username)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:156:57: C: [Correctable] Rails/OrderArguments: Prefer comments_count: :desc instead.
expect(response.body).not_to include(User.order("comments_count DESC").last.username)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:162:57: C: [Correctable] Rails/OrderArguments: Prefer comments_count: :desc instead.
expect(response.body).not_to include(User.order("comments_count DESC").first.username)

# ~/real-world-rails/apps/dev.to/spec/requests/sitemaps_spec.rb:163:57: C: [Correctable] Rails/OrderArguments: Prefer comments_count: :desc instead.
expect(response.body).not_to include(User.order("comments_count DESC").last.username)

# ~/real-world-rails/apps/discourse/app/controllers/admin/color_schemes_controller.rb:8:58: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
ColorScheme.base_color_schemes + ColorScheme.order("id ASC").all.to_a,

# ~/real-world-rails/apps/discourse/app/controllers/admin/screened_emails_controller.rb:5:54: C: [Correctable] Rails/OrderArguments: Prefer last_match_at: :desc instead.
screened_emails = ScreenedEmail.limit(200).order("last_match_at desc").to_a

# ~/real-world-rails/apps/discourse/app/controllers/admin/screened_ip_addresses_controller.rb:16:68: C: [Correctable] Rails/OrderArguments: Prefer match_count: :desc instead.
screened_ip_addresses = screened_ip_addresses.limit(200).order("match_count desc")

# ~/real-world-rails/apps/discourse/app/controllers/admin/screened_urls_controller.rb:11:16: C: [Correctable] Rails/OrderArguments: Prefer last_match_at: :desc instead.
.order("last_match_at DESC")

# ~/real-world-rails/apps/discourse/app/controllers/posts_controller.rb:984:16: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
.order("created_at ASC")

# ~/real-world-rails/apps/discourse/app/controllers/reviewables_controller.rb:117:47: C: [Correctable] Rails/OrderArguments: Prefer reviewable_score: :desc instead.
topics = Topic.where(id: topic_ids).order("reviewable_score DESC")

# ~/real-world-rails/apps/discourse/app/controllers/reviewables_controller.rb:260:90: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
post_action_types = PostActionType.where(id: PostActionType.flag_types.values).order("id")

# ~/real-world-rails/apps/discourse/app/controllers/stylesheets_controller.rb:54:27: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
query = query.order("id desc")

# ~/real-world-rails/apps/discourse/app/controllers/tag_groups_controller.rb:11:33: C: [Correctable] Rails/OrderArguments: Prefer :name instead.
tag_groups = TagGroup.order("name ASC").includes(:parent_tag).preload(:tags).all

# ~/real-world-rails/apps/discourse/app/controllers/tag_groups_controller.rb:39:33: C: [Correctable] Rails/OrderArguments: Prefer :name instead.
tag_groups = TagGroup.order("name ASC").includes(:parent_tag).preload(:tags).all

# ~/real-world-rails/apps/discourse/app/controllers/tag_groups_controller.rb:83:21: C: [Correctable] Rails/OrderArguments: Prefer :name instead.
matches.order("name").limit(

# ~/real-world-rails/apps/discourse/app/controllers/tags_controller.rb:51:18: C: [Correctable] Rails/OrderArguments: Prefer :name instead.
.order("name ASC")

# ~/real-world-rails/apps/discourse/app/controllers/user_badges_controller.rb:12:43: C: [Correctable] Rails/OrderArguments: Prefer granted_at: :desc, id: :desc instead.
user_badges = badge.user_badges.order("granted_at DESC, id DESC").limit(MAX_BADGES)

# ~/real-world-rails/apps/discourse/app/jobs/onceoff/fix_retro_anniversary.rb:24:19: C: [Correctable] Rails/OrderArguments: Prefer :granted_at instead.
).order("granted_at")

# ~/real-world-rails/apps/discourse/app/jobs/regular/export_csv_file.rb:181:16: C: [Correctable] Rails/OrderArguments: Prefer last_match_at: :desc instead.
.order("last_match_at DESC")

# ~/real-world-rails/apps/discourse/app/jobs/regular/process_sns_notification.rb:30:31: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
EmailLog.order("created_at DESC").where(to_address: r["emailAddress"]).first

# ~/real-world-rails/apps/discourse/app/jobs/scheduled/bookmark_reminder_notifications.rb:20:68: C: [Correctable] Rails/OrderArguments: Prefer :reminder_at instead.
bookmarks = Bookmark.pending_reminders.includes(:user).order("reminder_at ASC")

# ~/real-world-rails/apps/discourse/app/jobs/scheduled/create_recent_post_search_indexes.rb:46:16: C: [Correctable] Rails/OrderArguments: Prefer post_id: :desc instead.
.order("post_id DESC")

# ~/real-world-rails/apps/discourse/app/jobs/scheduled/pending_reviewables_reminder.rb:21:20: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
.order("id DESC")

# ~/real-world-rails/apps/discourse/app/jobs/scheduled/pending_reviewables_reminder.rb:68:53: C: [Correctable] Rails/OrderArguments: Prefer last_seen_at: :desc instead.
User.where(moderator: true).human_users.order("last_seen_at DESC").limit(3).pluck(:username)

# ~/real-world-rails/apps/discourse/app/jobs/scheduled/periodical_updates.rb:50:36: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
last_new_topic = Topic.order("created_at desc").offset(offset).select(:created_at).first

# ~/real-world-rails/apps/discourse/app/mailers/user_notifications.rb:484:16: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
.order("created_at desc")

# ~/real-world-rails/apps/discourse/app/mailers/user_notifications.rb:780:54: C: [Correctable] Rails/OrderArguments: Prefer user_count: :desc instead.
allowed_groups = post.topic.allowed_groups.order("user_count DESC")

# ~/real-world-rails/apps/discourse/app/mailers/user_notifications.rb:795:16: C: [Correctable] Rails/OrderArguments: Prefer post_number: :desc instead.
.order("post_number DESC")

# ~/real-world-rails/apps/discourse/app/models/about.rb:58:81: C: [Correctable] Rails/OrderArguments: Prefer last_seen_at: :desc instead.
@moderators ||= User.where(moderator: true, admin: false).human_users.order("last_seen_at DESC")

# ~/real-world-rails/apps/discourse/app/models/about.rb:65:51: C: [Correctable] Rails/OrderArguments: Prefer last_seen_at: :desc instead.
User.where(admin: true).human_users.order("last_seen_at DESC"),

# ~/real-world-rails/apps/discourse/app/models/category.rb:168:29: C: [Correctable] Rails/OrderArguments: Prefer topic_count: :desc instead.
scope :latest, -> { order("topic_count DESC") }

# ~/real-world-rails/apps/discourse/app/models/category.rb:913:16: C: [Correctable] Rails/OrderArguments: Prefer :bumped_at instead.
.order("bumped_at ASC")

# ~/real-world-rails/apps/discourse/app/models/category.rb:1257:69: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
oldest_topic = self.topics.where.not(id: self.topic_id).order("created_at ASC").limit(1).first

# ~/real-world-rails/apps/discourse/app/models/category_featured_topic.rb:26:16: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
.order("id ASC")

# ~/real-world-rails/apps/discourse/app/models/color_scheme.rb:305:45: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
has_many :color_scheme_colors, -> { order("id ASC") }, dependent: :destroy

# ~/real-world-rails/apps/discourse/app/models/concerns/reports/web_crawlers.rb:27:18: C: [Correctable] Rails/OrderArguments: Prefer sum_count: :desc instead.
.order("sum_count DESC")

# ~/real-world-rails/apps/discourse/app/models/incoming_links_report.rb:170:14: C: [Correctable] Rails/OrderArguments: Prefer count_all: :desc instead.
.order("count_all DESC")

# ~/real-world-rails/apps/discourse/app/models/invite.rb:149:18: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
.order("created_at DESC")

# ~/real-world-rails/apps/discourse/app/models/post.rb:100:32: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc, id: :desc instead.
scope :by_newest, -> { order("created_at DESC, id DESC") }

# ~/real-world-rails/apps/discourse/app/models/post.rb:101:37: C: [Correctable] Rails/OrderArguments: Prefer :post_number instead.
scope :by_post_number, -> { order("post_number ASC") }

# ~/real-world-rails/apps/discourse/app/models/post.rb:432:11: C: [Correctable] Rails/OrderArguments: Prefer sort_order: :desc, post_number: :desc instead.
order("sort_order desc, post_number desc")

# ~/real-world-rails/apps/discourse/app/models/post.rb:774:14: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
.order("id desc")

# ~/real-world-rails/apps/discourse/app/models/search_log.rb:96:14: C: [Correctable] Rails/OrderArguments: Prefer :date instead.
.order("date")

# ~/real-world-rails/apps/discourse/app/models/search_log.rb:134:39: C: [Correctable] Rails/OrderArguments: Prefer searches: :desc, click_through: :desc, term: :asc instead.
result.group("lower(term)").order("searches DESC, click_through DESC, term ASC").limit(limit)

# ~/real-world-rails/apps/discourse/app/models/sidebar_section.rb:8:47: C: [Correctable] Rails/OrderArguments: Prefer :position instead.
has_many :sidebar_section_links, -> { order("position") }, dependent: :destroy

# ~/real-world-rails/apps/discourse/app/models/stylesheet_cache.rb:22:72: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
StylesheetCache.where(target: target).limit(max_to_keep).order("id desc").pluck(:id).last

# ~/real-world-rails/apps/discourse/app/models/theme.rb:1011:18: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
.order("created_at DESC")

# ~/real-world-rails/apps/discourse/app/models/theme_field.rb:32:19: C: [Correctable] Rails/OrderArguments: Prefer :theme_sort_column instead.
).order("theme_sort_column")

# ~/real-world-rails/apps/discourse/app/models/topic.rb:461:49: C: [Correctable] Rails/OrderArguments: Prefer views: :desc instead.
Topic.listable_topics.visible.secured.order("views desc").limit(max)

# ~/real-world-rails/apps/discourse/app/models/topic.rb:465:49: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
Topic.listable_topics.visible.secured.order("created_at desc").limit(max)

# ~/real-world-rails/apps/discourse/app/models/topic.rb:758:16: C: [Correctable] Rails/OrderArguments: Prefer similarity: :desc instead.
.order("similarity DESC")

# ~/real-world-rails/apps/discourse/app/models/topic.rb:1177:24: C: [Correctable] Rails/OrderArguments: Prefer post_number: :desc instead.
self.posts.order("post_number desc").where("not hidden AND posts.deleted_at IS NULL").first

# ~/real-world-rails/apps/discourse/app/models/topic_user.rb:210:20: C: [Correctable] Rails/OrderArguments: Prefer notification_level: :desc instead.
.order("notification_level DESC")

# ~/real-world-rails/apps/discourse/app/models/topic_user.rb:226:20: C: [Correctable] Rails/OrderArguments: Prefer notification_level: :desc instead.
.order("notification_level DESC")

# ~/real-world-rails/apps/discourse/app/models/upload.rb:658:14: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
.order("id desc")

# ~/real-world-rails/apps/discourse/app/models/user.rb:1267:14: C: [Correctable] Rails/OrderArguments: Prefer post_number: :desc instead.
.order("post_number desc")

# ~/real-world-rails/apps/discourse/app/models/user.rb:1281:48: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
UserHistory.for(self, :silence_user).order("id DESC").first

# ~/real-world-rails/apps/discourse/app/models/user.rb:1297:48: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
UserHistory.for(self, :suspend_user).order("id DESC").first

# ~/real-world-rails/apps/discourse/app/models/user_action.rb:76:14: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
.order("created_at DESC")

# ~/real-world-rails/apps/discourse/app/models/user_auth_token.rb:270:16: C: [Correctable] Rails/OrderArguments: Prefer rotated_at: :desc instead.
.order("rotated_at DESC")

# ~/real-world-rails/apps/discourse/app/models/user_history.rb:311:16: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
.order("id DESC")

# ~/real-world-rails/apps/discourse/app/models/user_search.rb:209:15: C: [Correctable] Rails/OrderArguments: Prefer :rn instead.
).order("rn")

# ~/real-world-rails/apps/discourse/app/models/user_summary.rb:22:14: C: [Correctable] Rails/OrderArguments: Prefer like_count: :desc, created_at: :desc instead.
.order("like_count DESC, created_at DESC")

# ~/real-world-rails/apps/discourse/app/models/web_hook.rb:13:25: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
default_scope { order("id ASC") }

# ~/real-world-rails/apps/discourse/app/models/web_hook_event.rb:13:25: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
default_scope { order("created_at DESC") }

# ~/real-world-rails/apps/discourse/app/models/web_hook_event_type.rb:92:25: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
default_scope { order("id ASC") }

# ~/real-world-rails/apps/discourse/app/models/web_hook_events_daily_aggregate.rb:6:25: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
default_scope { order("created_at DESC") }

# ~/real-world-rails/apps/discourse/app/serializers/user_serializer.rb:178:14: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
.order("created_at ASC")

# ~/real-world-rails/apps/discourse/app/services/post_alerter.rb:392:37: C: [Correctable] Rails/OrderArguments: Prefer :post_number instead.
unread_posts(user, topic).order("post_number").first

# ~/real-world-rails/apps/discourse/app/services/post_owner_changer.rb:40:21: C: [Correctable] Rails/OrderArguments: Prefer post_number: :desc instead.
.order("post_number DESC")

# ~/real-world-rails/apps/discourse/app/services/post_owner_changer.rb:49:62: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
first_post_created_at: @new_owner.reload.posts.order("created_at ASC").first&.created_at,

# ~/real-world-rails/apps/discourse/db/migrate/20130221215017_add_description_to_categories.rb:21:16: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
.order("id")

# ~/real-world-rails/apps/discourse/db/migrate/20140504174212_increment_reserved_trust_level_badge_ids.rb:7:32: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
max_badge_id = Badge.order("id DESC").limit(1).first.try(:id)

# ~/real-world-rails/apps/discourse/lib/composer_messages_finder.rb:127:16: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
.order("created_at desc")

# ~/real-world-rails/apps/discourse/lib/composer_messages_finder.rb:196:16: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
.order("created_at desc")

# ~/real-world-rails/apps/discourse/lib/cooked_post_processor.rb:105:16: C: [Correctable] Rails/OrderArguments: Prefer post_number: :desc instead.
.order("post_number DESC")

# ~/real-world-rails/apps/discourse/lib/filter_best_posts.rb:41:36: C: [Correctable] Rails/OrderArguments: Prefer :percent_rank, :sort_order instead.
@posts = @filtered_posts.order("percent_rank asc, sort_order asc").where("post_number > 1")

# ~/real-world-rails/apps/discourse/lib/post_destroyer.rb:314:16: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
.order("created_at desc")

# ~/real-world-rails/apps/discourse/lib/post_destroyer.rb:374:75: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
return unless allowed_user && rs = reviewable.reviewable_scores.order("created_at DESC").first

# ~/real-world-rails/apps/discourse/lib/post_destroyer.rb:456:51: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
first_post_created_at: author.posts.order("created_at ASC").first.try(:created_at),

# ~/real-world-rails/apps/discourse/lib/post_destroyer.rb:465:28: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
author.posts.order("created_at DESC").first.try(:created_at),

# ~/real-world-rails/apps/discourse/lib/post_revisor.rb:521:57: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
first_post_created_at: prev_owner.posts.order("created_at ASC").first.try(:created_at),

# ~/real-world-rails/apps/discourse/lib/search.rb:202:16: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
.order("id desc")

# ~/real-world-rails/apps/discourse/lib/search.rb:1015:16: C: [Correctable] Rails/OrderArguments: Prefer topics_month: :desc instead.
.order("topics_month DESC")

# ~/real-world-rails/apps/discourse/lib/search.rb:1033:16: C: [Correctable] Rails/OrderArguments: Prefer last_posted_at: :desc instead.
.order("last_posted_at DESC")

# ~/real-world-rails/apps/discourse/lib/search.rb:1085:16: C: [Correctable] Rails/OrderArguments: Prefer :name instead.
.order("name asc")

# ~/real-world-rails/apps/discourse/lib/search.rb:1436:13: C: [Correctable] Rails/OrderArguments: Prefer :row_number instead.
).order("row_number")

# ~/real-world-rails/apps/discourse/lib/tasks/posts.rake:217:60: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
last_id_as_of_now = Post.where(baked_version: nil).order("id desc").first&.id

# ~/real-world-rails/apps/discourse/lib/topic_query.rb:398:16: C: [Correctable] Rails/OrderArguments: Prefer pinned_at: :desc instead.
.order("pinned_at DESC")

# ~/real-world-rails/apps/discourse/plugins/chat/app/models/chat/thread.rb:62:72: C: [Correctable] Rails/OrderArguments: Prefer :created_at, :id instead.
self.chat_messages.where.not(id: self.original_message_id).order("created_at ASC, id ASC")

# ~/real-world-rails/apps/discourse/plugins/chat/lib/chat/channel_archive_service.rb:117:18: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
.order("created_at ASC")

# ~/real-world-rails/apps/discourse/plugins/chat/lib/chat/channel_archive_service.rb:131:24: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
.order("created_at ASC")

# ~/real-world-rails/apps/discourse/plugins/chat/lib/chat/message_mover.rb:89:16: C: [Correctable] Rails/OrderArguments: Prefer :created_at, :id instead.
.order("created_at ASC, id ASC")

# ~/real-world-rails/apps/discourse/plugins/chat/lib/chat/review_queue.rb:150:18: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
.order("created_at DESC")

# ~/real-world-rails/apps/discourse/plugins/chat/spec/lib/chat/message_mover_spec.rb:107:18: C: [Correctable] Rails/OrderArguments: Prefer :created_at, :id instead.
.order("created_at ASC, id ASC")

# ~/real-world-rails/apps/discourse/plugins/chat/spec/lib/chat/message_mover_spec.rb:125:18: C: [Correctable] Rails/OrderArguments: Prefer :created_at, :id instead.
.order("created_at ASC, id ASC")

# ~/real-world-rails/apps/discourse/plugins/chat/spec/lib/chat/message_mover_spec.rb:141:18: C: [Correctable] Rails/OrderArguments: Prefer :created_at, :id instead.
.order("created_at ASC, id ASC")

# ~/real-world-rails/apps/discourse/plugins/chat/spec/lib/chat/message_mover_spec.rb:168:20: C: [Correctable] Rails/OrderArguments: Prefer :created_at, :id instead.
.order("created_at ASC, id ASC")

# ~/real-world-rails/apps/discourse/plugins/chat/spec/lib/chat/message_mover_spec.rb:232:22: C: [Correctable] Rails/OrderArguments: Prefer :created_at, :id instead.
.order("created_at ASC, id ASC")

# ~/real-world-rails/apps/discourse/plugins/chat/spec/lib/chat/message_mover_spec.rb:263:22: C: [Correctable] Rails/OrderArguments: Prefer :created_at, :id instead.
.order("created_at ASC, id ASC")

# ~/real-world-rails/apps/discourse/script/import_scripts/base.rb:904:35: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
if first = user.posts.order("created_at ASC").first

# ~/real-world-rails/apps/discourse/script/user_simulator.rb:47:27: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
last_topics = Topic.order("id desc").limit(10).pluck(:id)

# ~/real-world-rails/apps/discourse/spec/lib/concern/positionable_spec.rb:5:20: C: [Correctable] Rails/OrderArguments: Prefer :position, :id instead.
TestItem.order("position asc, id asc").pluck(:id)

# ~/real-world-rails/apps/discourse/spec/lib/inline_oneboxer_spec.rb:136:40: C: [Correctable] Rails/OrderArguments: Prefer :post_number instead.
posts = topic.reload.posts.order("post_number ASC")

# ~/real-world-rails/apps/discourse/spec/lib/inline_oneboxer_spec.rb:143:40: C: [Correctable] Rails/OrderArguments: Prefer :post_number instead.
posts = topic.reload.posts.order("post_number ASC")

# ~/real-world-rails/apps/discourse/spec/lib/inline_oneboxer_spec.rb:150:40: C: [Correctable] Rails/OrderArguments: Prefer :post_number instead.
posts = topic.reload.posts.order("post_number ASC")

# ~/real-world-rails/apps/discourse/spec/lib/topic_query_spec.rb:1499:35: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
{ result: Topic.order("id desc").limit(1), params: {} }

# ~/real-world-rails/apps/discourse/spec/models/category_featured_topic_spec.rb:84:69: C: [Correctable] Rails/OrderArguments: Prefer :rank instead.
CategoryFeaturedTopic.where(category_id: category.id).order("rank asc").pluck(:topic_id),

# ~/real-world-rails/apps/discourse/spec/models/post_timing_spec.rb:99:48: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
user_visit = post.user.user_visits.order("id DESC").first

# ~/real-world-rails/apps/discourse/spec/models/topic_converter_spec.rb:64:22: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
.order("id asc")

# ~/real-world-rails/apps/discourse/spec/models/topic_link_click_spec.rb:181:42: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
click = TopicLinkClick.order("id desc").first

# ~/real-world-rails/apps/discourse/spec/models/topic_link_click_spec.rb:183:63: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
expect(click.topic_link_id).to eq(TopicLink.order("id desc").first.id)

# ~/real-world-rails/apps/discourse/spec/requests/admin/users_controller_spec.rb:279:64: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
log = UserHistory.where(target_user_id: user.id).order("id desc").first

# ~/real-world-rails/apps/discourse/spec/requests/admin/users_controller_spec.rb:399:66: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
log = UserHistory.where(target_user_id: user.id).order("id desc").first

# ~/real-world-rails/apps/discourse/spec/requests/admin/users_controller_spec.rb:486:64: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
log = UserHistory.where(target_user_id: user.id).order("id desc").first

# ~/real-world-rails/apps/gitlabhq/app/controllers/admin/groups_controller.rb:24:27: C: [Correctable] Rails/OrderArguments: Prefer access_level: :desc instead.
group_members.order("access_level DESC").page(params[:members_page]))

# ~/real-world-rails/apps/gitlabhq/app/controllers/admin/projects_controller.rb:34:30: C: [Correctable] Rails/OrderArguments: Prefer access_level: :desc instead.
@group.members.order("access_level DESC").page(params[:group_members_page]))

# ~/real-world-rails/apps/gitlabhq/app/models/award_emoji.rb:53:16: C: [Correctable] Rails/OrderArguments: Prefer count_all: :desc, name: :asc instead.
.order('count_all DESC, name ASC')

# ~/real-world-rails/apps/gitlabhq/app/models/ci/runner.rb:93:37: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
has_one :last_build, -> { order('id DESC') }, class_name: 'Ci::Build'

# ~/real-world-rails/apps/gitlabhq/app/models/clusters/agents/authorizations/user_access/group_authorization.rb:22:22: C: [Correctable] Rails/OrderArguments: Prefer :id, access_level: :desc instead.
.order('id, access_level DESC')

# ~/real-world-rails/apps/gitlabhq/app/models/concerns/issuable.rb:577:18: C: [Correctable] Rails/OrderArguments: Prefer :title instead.
labels.order('title ASC').pluck(:title)

# ~/real-world-rails/apps/gitlabhq/app/models/concerns/taggable_queries.rb:43:36: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
tags.limit(MAX_TAGS_IDS).order('id ASC').pluck(:id).tap do |ids|

# ~/real-world-rails/apps/gitlabhq/app/models/environment.rb:168:14: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
.order("created_at ASC")

# ~/real-world-rails/apps/gitlabhq/app/models/environment.rb:253:14: C: [Correctable] Rails/OrderArguments: Prefer :name instead.
.order('name ASC')

# ~/real-world-rails/apps/gitlabhq/app/models/group_group_link.rb:50:12: C: [Correctable] Rails/OrderArguments: Prefer :shared_with_group_id, group_access: :desc, expires_at: :desc, created_at: :asc instead.
.order('shared_with_group_id, group_access DESC, expires_at DESC, created_at ASC')

# ~/real-world-rails/apps/gitlabhq/app/models/merge_request/cleanup_schedule.rb:51:14: C: [Correctable] Rails/OrderArguments: Prefer scheduled_at: :desc instead.
.order('scheduled_at DESC')

# ~/real-world-rails/apps/gitlabhq/app/models/merge_request_context_commit.rb:21:51: C: [Correctable] Rails/OrderArguments: Prefer committed_date: :desc instead.
scope :order_by_committed_date_desc, -> { order('committed_date DESC') }

# ~/real-world-rails/apps/gitlabhq/app/models/ml/candidate_metric.rb:10:76: C: [Correctable] Rails/OrderArguments: Prefer :candidate_id, :name, id: :desc instead.
scope :latest, -> { select('DISTINCT ON (candidate_id, name) *').order('candidate_id, name, id DESC') }

# ~/real-world-rails/apps/gitlabhq/app/models/ml/model_version.rb:30:50: C: [Correctable] Rails/OrderArguments: Prefer :model_id, id: :desc instead.
scope :order_by_model_id_id_desc, -> { order('model_id, id DESC') }

# ~/real-world-rails/apps/gitlabhq/app/models/project.rb:349:46: C: [Correctable] Rails/OrderArguments: Prefer share: :desc instead.
has_many :repository_languages, -> { order "share DESC" }

# ~/real-world-rails/apps/gitlabhq/app/models/snippet.rb:79:28: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
scope :fresh, -> { order("created_at DESC") }

# ~/real-world-rails/apps/gitlabhq/app/serializers/environment_serializer.rb:36:28: C: [Correctable] Rails/OrderArguments: Prefer :folder instead.
items = resource.order('folder ASC')

# ~/real-world-rails/apps/gitlabhq/app/services/ci/queue/pending_builds_strategy.rb:38:24: C: [Correctable] Rails/OrderArguments: Prefer :build_id instead.
relation.order('build_id ASC')

# ~/real-world-rails/apps/gitlabhq/lib/gitlab/project_search_results.rb:146:109: C: [Correctable] Rails/OrderArguments: Prefer updated_at: :desc instead.
NotesFinder.new(@current_user, search: query, target_type: type, project: project).execute.user.order('updated_at DESC')

# ~/real-world-rails/apps/gitlabhq/lib/gitlab/usage/metrics/query.rb:63:22: C: [Correctable] Rails/OrderArguments: Prefer :buckets instead.
.order('buckets')

# ~/real-world-rails/apps/gitlabhq/lib/gitlab/utils/usage_data.rb:159:20: C: [Correctable] Rails/OrderArguments: Prefer :buckets instead.
.order('buckets')

# ~/real-world-rails/apps/gitlabhq/spec/lib/gitlab/pagination/keyset/simple_order_builder_spec.rb:282:35: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
let(:scope) { Project.order('id DESC') }

# ~/real-world-rails/apps/gitlabhq/spec/models/design_management/action_spec.rb:37:28: C: [Correctable] Rails/OrderArguments: Prefer version_id: :desc instead.
.zip(dvs.order("version_id DESC").pluck(:version_id).uniq)

# ~/real-world-rails/apps/gitlabhq/spec/services/issues/clone_service_spec.rb:298:37: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
expect(copied_notes.order('id ASC').pluck(:note).size).to eq(1)

# ~/real-world-rails/apps/gitlabhq/spec/services/issues/clone_service_spec.rb:305:39: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
expect(copied_notes.order('id ASC').pluck(:note)).to eq(notes.map(&:note))

# ~/real-world-rails/apps/gitlabhq/spec/services/issues/move_service_spec.rb:335:37: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
expect(copied_notes.order('id ASC').pluck(:note)).to eq(notes.map(&:note))

# ~/real-world-rails/apps/gitlabhq/spec/services/notes/copy_service_spec.rb:40:42: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
expect(to_noteable.notes.order('id ASC').pluck(:note).first(3)).to eq(notes.map(&:note))

# ~/real-world-rails/apps/openproject/app/controllers/application_controller.rb:340:40: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
.order("id ASC")

# ~/real-world-rails/apps/openproject/app/models/menu_item.rb:32:11: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
order("id ASC")

# ~/real-world-rails/apps/openproject/app/models/project.rb:81:32: C: [Correctable] Rails/OrderArguments: Prefer :position instead.
has_many :forums, -> { order("position ASC") }, dependent: :destroy

# ~/real-world-rails/apps/openproject/app/models/type.rb:68:25: C: [Correctable] Rails/OrderArguments: Prefer :position instead.
default_scope { order("position ASC") }

# ~/real-world-rails/apps/openproject/app/models/user.rb:52:11: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
order("id DESC")

# ~/real-world-rails/apps/openproject/app/models/wiki.rb:32:11: C: [Correctable] Rails/OrderArguments: Prefer :title instead.
order("title")

# ~/real-world-rails/apps/openproject/app/models/wiki.rb:35:11: C: [Correctable] Rails/OrderArguments: Prefer :name instead.
order("name")

# ~/real-world-rails/apps/openproject/app/services/projects/copy/work_packages_dependent_service.rb:66:16: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
.order("id ASC")

# ~/real-world-rails/apps/openproject/modules/bim/app/controllers/bim/ifc_models/ifc_viewer_controller.rb:59:18: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
.order("created_at ASC")

# ~/real-world-rails/apps/openproject/modules/two_factor_authentication/app/models/two_factor_authentication/device.rb:3:27: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
default_scope { order("id ASC") }

# ~/real-world-rails/apps/openproject/spec/models/work_package_spec.rb:706:16: C: [Correctable] Rails/OrderArguments: Prefer :journable_id, updated_at: :desc instead.
.order("journable_id, updated_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/accounts_controller.rb:1653:48: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
@last_batch = @account.sis_batches.order("created_at DESC").first

# ~/real-world-rails/apps/canvas-lms/app/controllers/appointment_groups_controller.rb:260:19: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
scope.order("id"),

# ~/real-world-rails/apps/canvas-lms/app/controllers/comm_messages_api_controller.rb:127:33: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
query = user.messages.order("created_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/conferences_controller.rb:198:72: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc, id: :desc instead.
conferences = conferences.with_config_for(context: @context).order("created_at DESC, id DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/conferences_controller.rb:222:19: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc, id: :desc instead.
scope.order("created_at DESC, id DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/conferences_controller.rb:253:30: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc, id: :desc instead.
conference_scope.order("created_at DESC, id DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/conferences_controller.rb:260:30: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc, id: :desc instead.
conference_scope.order("created_at DESC, id DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/content_exports_api_controller.rb:98:27: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
scope = scope.order("id DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/content_migrations_controller.rb:165:83: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
scope = @context.content_migrations.where(child_subscription_id: nil).order("id DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/conversations_controller.rb:492:109: C: [Correctable] Rails/OrderArguments: Prefer visible_last_authored_at: :desc, last_message_at: :desc, id: :desc instead.
conversations = ConversationParticipant.where(id: batch.conversations).preload(:conversation).order("visible_last_authored_at DESC, last_message_at DESC, id DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/errors_controller.rb:90:31: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
@reports = @reports.order("created_at DESC").paginate(per_page: PER_PAGE, page: params[:page], total_entries: nil)

# ~/real-world-rails/apps/canvas-lms/app/controllers/learner_passport_controller.rb:870:26: C: [Correctable] Rails/OrderArguments: Prefer :sortable_name instead.
.order("sortable_name")

# ~/real-world-rails/apps/canvas-lms/app/controllers/master_courses/master_templates_controller.rb:547:65: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
migrations = Api.paginate(@template.master_migrations.order("id DESC"), self, api_v1_course_blueprint_migrations_url)

# ~/real-world-rails/apps/canvas-lms/app/controllers/master_courses/master_templates_controller.rb:623:32: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
.order("id DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/messages_controller.rb:31:41: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
@messages = @context.messages.order("created_at DESC").paginate(page: params[:page], per_page: 20)

# ~/real-world-rails/apps/canvas-lms/app/controllers/polling/polls_controller.rb:78:42: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
@polls = @current_user.polls.order("created_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/quizzes/quiz_submission_events_api_controller.rb:135:38: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
.order("created_at ASC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/search_controller.rb:174:29: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
.order("created_at")

# ~/real-world-rails/apps/canvas-lms/app/controllers/sis_import_errors_api_controller.rb:87:47: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
scope = @account.sis_batch_errors.order("created_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/sis_imports_api_controller.rb:404:42: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
scope = @account.sis_batches.order("created_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/terms_api_controller.rb:178:31: C: [Correctable] Rails/OrderArguments: Prefer start_at: :desc, end_at: :desc, id: :asc instead.
@terms = @terms.order("start_at DESC, end_at DESC, id ASC")

# ~/real-world-rails/apps/canvas-lms/app/controllers/users_controller.rb:903:108: C: [Correctable] Rails/OrderArguments: Prefer :sort_key instead.
@courses += scope.select("courses.*,#{Course.best_unicode_collation_key("name")} AS sort_key").order("sort_key").preload(:enrollment_term).to_a

# ~/real-world-rails/apps/canvas-lms/app/controllers/web_zip_exports_controller.rb:123:78: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
user_web_zips = @context.web_zip_exports.visible_to(@current_user).order("created_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/graphql/mutations/create_conversation.rb:96:55: C: [Correctable] Rails/OrderArguments: Prefer visible_last_authored_at: :desc, last_message_at: :desc, id: :desc instead.
.order("visible_last_authored_at DESC, last_message_at DESC, id DESC")

# ~/real-world-rails/apps/canvas-lms/app/graphql/types/course_type.rb:193:20: C: [Correctable] Rails/OrderArguments: Prefer :name instead.
.order("name")

# ~/real-world-rails/apps/canvas-lms/app/helpers/conversations_helper.rb:372:87: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
start: settings.out_of_office_first_date).order("created_at DESC").first

# ~/real-world-rails/apps/canvas-lms/app/models/account_notification.rb:234:45: C: [Correctable] Rails/OrderArguments: Prefer start_at: :desc instead.
.order("start_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/models/asset_user_access.rb:39:34: C: [Correctable] Rails/OrderArguments: Prefer updated_at: :desc instead.
scope :most_recent, -> { order("updated_at DESC") }

# ~/real-world-rails/apps/canvas-lms/app/models/assignment_group.rb:43:37: C: [Correctable] Rails/OrderArguments: Prefer :position, :due_at, :title instead.
has_many :assignments, -> { order("position, due_at, title") }

# ~/real-world-rails/apps/canvas-lms/app/models/conditional_release/assignment_set_action.rb:39:16: C: [Correctable] Rails/OrderArguments: Prefer :assignment_set_id, :student_id, updated_at: :desc instead.
.order("assignment_set_id, student_id, updated_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/models/conversation.rb:28:47: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc, id: :desc instead.
has_many :conversation_messages, -> { order("created_at DESC, id DESC") }, dependent: :delete_all

# ~/real-world-rails/apps/canvas-lms/app/models/conversation_message.rb:81:22: C: [Correctable] Rails/OrderArguments: Prefer conversation_id: :desc, user_id: :desc, created_at: :desc instead.
.order("conversation_id DESC, user_id DESC, created_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/models/conversation_message.rb:324:138: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
@forwarded_messages ||= (forwarded_message_ids && self.class.unscoped { self.class.where(id: forwarded_message_ids.split(",")).order("created_at DESC").to_a }) || []

# ~/real-world-rails/apps/canvas-lms/app/models/conversation_participant.rb:40:68: C: [Correctable] Rails/OrderArguments: Prefer visible_last_authored_at: :desc, conversation_id: :desc instead.
scope :sent, -> { where.not(visible_last_authored_at: nil).order("visible_last_authored_at DESC, conversation_id DESC") }

# ~/real-world-rails/apps/canvas-lms/app/models/conversation_participant.rb:230:33: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc, id: :desc instead.
.order("created_at DESC, id DESC")

# ~/real-world-rails/apps/canvas-lms/app/models/course.rb:101:34: C: [Correctable] Rails/OrderArguments: Prefer :sortable_name instead.
has_many :teachers, -> { order("sortable_name") }, through: :teacher_enrollments, source: :user

# ~/real-world-rails/apps/canvas-lms/app/models/course.rb:187:48: C: [Correctable] Rails/OrderArguments: Prefer :name instead.
has_many :context_external_tools, -> { order("name") }, as: :context, inverse_of: :context, dependent: :destroy

# ~/real-world-rails/apps/canvas-lms/app/models/course.rb:204:41: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
has_many :web_conferences, -> { order("created_at DESC") }, as: :context, inverse_of: :context, dependent: :destroy

# ~/real-world-rails/apps/canvas-lms/app/models/course.rb:216:55: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
has_many :epub_exports, -> { where(type: nil).order("created_at DESC") }

# ~/real-world-rails/apps/canvas-lms/app/models/course.rb:897:83: C: [Correctable] Rails/OrderArguments: Prefer start_at: :desc instead.
scope :recently_started, -> { where(start_at: 1.month.ago..Time.zone.now).order("start_at DESC").limit(10) }

# ~/real-world-rails/apps/canvas-lms/app/models/course.rb:898:84: C: [Correctable] Rails/OrderArguments: Prefer start_at: :desc instead.
scope :recently_ended, -> { where(conclude_at: 1.month.ago..Time.zone.now).order("start_at DESC").limit(10) }

# ~/real-world-rails/apps/canvas-lms/app/models/course.rb:899:85: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
scope :recently_created, -> { where(created_at: 1.month.ago..Time.zone.now).order("created_at DESC").limit(50).preload(:teachers) }

# ~/real-world-rails/apps/canvas-lms/app/models/epub_export.rb:28:37: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
has_many :attachments, -> { order("created_at DESC") }, dependent: :destroy, as: :context, inverse_of: :context, class_name: "Attachment"

# ~/real-world-rails/apps/canvas-lms/app/models/epub_export.rb:29:84: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
has_one :epub_attachment, -> { where(content_type: "application/epub+zip").order("created_at DESC") }, as: :context, inverse_of: :context, class_name: "Attachment"

# ~/real-world-rails/apps/canvas-lms/app/models/epub_export.rb:30:78: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
has_one :zip_attachment, -> { where(content_type: "application/zip").order("created_at DESC") }, as: :context, inverse_of: :context, class_name: "Attachment"

# ~/real-world-rails/apps/canvas-lms/app/models/epub_exports/course_epub_exports_presenter.rb:63:38: C: [Correctable] Rails/OrderArguments: Prefer :course_id, created_at: :desc instead.
.order("course_id, created_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/models/master_courses/child_subscription.rb:139:78: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
child_course.content_migrations.where(child_subscription_id: self).order("id desc").limit(1).pick(:id)

# ~/real-world-rails/apps/canvas-lms/app/models/master_courses/master_template.rb:243:92: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
@last_export_started_at = master_migrations.where(workflow_state: "completed").order("id DESC").limit(1).pick(:exports_started_at)

# ~/real-world-rails/apps/canvas-lms/app/models/master_courses/master_template.rb:250:94: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
@last_export_completed_at = master_migrations.where(workflow_state: "completed").order("id DESC").limit(1).pick(:imports_completed_at)

# ~/real-world-rails/apps/canvas-lms/app/models/outcome_proficiency.rb:30:23: C: [Correctable] Rails/OrderArguments: Prefer points: :desc, id: :asc instead.
-> { order "points DESC, id ASC" },

# ~/real-world-rails/apps/canvas-lms/app/models/page_view.rb:225:44: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
scope = where(user_id: user).order("created_at desc")

# ~/real-world-rails/apps/canvas-lms/app/models/quizzes/log_auditing/event_aggregator.rb:66:60: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
}).order("created_at ASC")

# ~/real-world-rails/apps/canvas-lms/app/models/quizzes/log_auditing/question_answered_event_extractor.rb:58:66: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
}).order("created_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/models/quizzes/quiz.rb:1043:40: C: [Correctable] Rails/OrderArguments: Prefer updated_at: :desc instead.
quiz_submissions.completed.order("updated_at DESC").limit(1).pick(:updated_at)

# ~/real-world-rails/apps/canvas-lms/app/models/stream_item.rb:413:51: C: [Correctable] Rails/OrderArguments: Prefer updated_at: :desc instead.
scope :before, ->(id) { where("id<?", id).order("updated_at DESC").limit(21) }

# ~/real-world-rails/apps/canvas-lms/app/models/stream_item.rb:414:70: C: [Correctable] Rails/OrderArguments: Prefer updated_at: :desc instead.
scope :after, ->(start_at) { where("updated_at>?", start_at).order("updated_at DESC").limit(21) }

# ~/real-world-rails/apps/canvas-lms/app/models/submission.rb:153:52: C: [Correctable] Rails/OrderArguments: Prefer :created_at, :id instead.
has_many :hidden_submission_comments, -> { order("created_at, id").where(provisional_grade_id: nil, hidden: true) }, class_name: "SubmissionComment"

# ~/real-world-rails/apps/canvas-lms/app/models/submission.rb:235:14: C: [Correctable] Rails/OrderArguments: Prefer graded_at: :desc instead.
.order("graded_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/models/user.rb:181:96: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
has_many :dashboard_messages, -> { where(to: "dashboard", workflow_state: "dashboard").order("created_at DESC") }, class_name: "Message", dependent: :destroy

# ~/real-world-rails/apps/canvas-lms/app/models/user.rb:182:39: C: [Correctable] Rails/OrderArguments: Prefer :created_at instead.
has_many :user_services, -> { order("created_at") }, dependent: :destroy

# ~/real-world-rails/apps/canvas-lms/app/models/user.rb:279:37: C: [Correctable] Rails/OrderArguments: Prefer last_message_at: :desc, conversation_id: :desc instead.
all_conversations.visible.order("last_message_at DESC, conversation_id DESC")

# ~/real-world-rails/apps/canvas-lms/app/models/user.rb:283:29: C: [Correctable] Rails/OrderArguments: Prefer updated_at: :desc, conversation_id: :desc instead.
all_conversations.order("updated_at DESC, conversation_id DESC").starred

# ~/real-world-rails/apps/canvas-lms/app/models/user.rb:455:17: C: [Correctable] Rails/OrderArguments: Prefer :enrollment_rank instead.
.order("enrollment_rank")

# ~/real-world-rails/apps/canvas-lms/app/models/user.rb:1744:52: C: [Correctable] Rails/OrderArguments: Prefer avatar_image_updated_at: :desc instead.
scope = where.not(avatar_image_url: nil).order("avatar_image_updated_at DESC")

# ~/real-world-rails/apps/canvas-lms/app/models/user.rb:2380:56: C: [Correctable] Rails/OrderArguments: Prefer :last_comment_at instead.
.limit(limit).order("last_comment_at").to_a

# ~/real-world-rails/apps/canvas-lms/app/models/user_note.rb:40:35: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
scope :desc_by_date, -> { order("created_at DESC") }

# ~/real-world-rails/apps/canvas-lms/app/models/web_conference.rb:26:39: C: [Correctable] Rails/OrderArguments: Prefer updated_at: :desc instead.
has_one :calendar_event, -> { order("updated_at desc") }, inverse_of: :web_conference, dependent: :nullify

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:54:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [1, 2, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:57:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [2, 3, 4, 1]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:60:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [1, 2, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:63:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [1, 3, 4, 2]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:66:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [4, 1, 3, 2]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:71:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [1, 2, 4, 3]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:138:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [1, 2, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:141:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [1, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:148:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:157:60: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(UnscopedListMixin.where(parent_id: nil).order("pos").to_a).to eq [new2, new1, new3]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:167:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [1, 2, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:170:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [2, 1, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:179:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [1, 2, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:183:53: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5").order("pos").pluck(:id)).to eq [1, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:198:56: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5000").order("pos").pluck(:id)).to eq [1, 2, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:201:56: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5000").order("pos").pluck(:id)).to eq [2, 3, 4, 1]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:204:56: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5000").order("pos").pluck(:id)).to eq [1, 2, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:207:56: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5000").order("pos").pluck(:id)).to eq [1, 3, 4, 2]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:210:56: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5000").order("pos").pluck(:id)).to eq [4, 1, 3, 2]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:214:56: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5000").order("pos").pluck(:id)).to eq [1, 2, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:216:56: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5000").order("pos").pluck(:id)).to eq [1, 2, 4, 3]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:261:56: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5000").order("pos").pluck(:id)).to eq [1, 2, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:264:56: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5000").order("pos").pluck(:id)).to eq [1, 3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/acts_as_list/spec/list_spec.rb:271:56: C: [Correctable] Rails/OrderArguments: Prefer :pos instead.
expect(ListMixin.where("parent_id = 5000").order("pos").pluck(:id)).to eq [3, 4]

# ~/real-world-rails/apps/canvas-lms/gems/bookmarked_collection/spec/bookmarked_collection/bookmarked_collection_spec.rb:40:21: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
scope.order("id ASC")

# ~/real-world-rails/apps/canvas-lms/gems/bookmarked_collection/spec/bookmarked_collection/bookmarked_collection_spec.rb:60:21: C: [Correctable] Rails/OrderArguments: Prefer :name instead.
scope.order("name ASC")

# ~/real-world-rails/apps/canvas-lms/gems/bookmarked_collection/spec/bookmarked_collection/merge_proxy_spec.rb:39:21: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
scope.order("id ASC")

# ~/real-world-rails/apps/canvas-lms/gems/bookmarked_collection/spec/bookmarked_collection/merge_proxy_spec.rb:170:91: C: [Correctable] Rails/OrderArguments: Prefer date: :desc, id: :asc instead.
created_collection = BookmarkedCollection.wrap(nil_bookmark, @created_scope.order("date DESC, id"))

# ~/real-world-rails/apps/canvas-lms/gems/bookmarked_collection/spec/bookmarked_collection/merge_proxy_spec.rb:171:91: C: [Correctable] Rails/OrderArguments: Prefer date: :desc, id: :asc instead.
deleted_collection = BookmarkedCollection.wrap(nil_bookmark, @deleted_scope.order("date DESC, id"))

# ~/real-world-rails/apps/canvas-lms/gems/event_stream/lib/event_stream/index_strategy/active_record.rb:60:45: C: [Correctable] Rails/OrderArguments: Prefer created_at: :desc instead.
bookmark_scope = bookmark_scope.order("created_at DESC")

# ~/real-world-rails/apps/canvas-lms/gems/plugins/account_reports/lib/account_reports/report_helper.rb:253:16: C: [Correctable] Rails/OrderArguments: Prefer :user_id, :position instead.
.order("user_id, position ASC")

# ~/real-world-rails/apps/canvas-lms/gems/plugins/simply_versioned/lib/simply_versioned.rb:87:27: C: [Correctable] Rails/OrderArguments: Prefer number: :desc instead.
-> { order("number DESC") },

# ~/real-world-rails/apps/canvas-lms/gems/plugins/simply_versioned/lib/simply_versioned.rb:96:26: C: [Correctable] Rails/OrderArguments: Prefer number: :desc instead.
-> { order("number DESC") },

# ~/real-world-rails/apps/canvas-lms/lib/api/v1/gradebook_history.rb:142:58: C: [Correctable] Rails/OrderArguments: Prefer graded_at: :desc instead.
collection = ::Submission.for_course(course).order("graded_at DESC")

# ~/real-world-rails/apps/canvas-lms/lib/data_fixup/rebuild_quiz_submissions_from_quiz_submission_versions.rb:95:15: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
).order("id ASC").map(&:model)

# ~/real-world-rails/apps/canvas-lms/spec/apis/v1/conversations_api_spec.rb:602:52: C: [Correctable] Rails/OrderArguments: Prefer conversation_id: :desc instead.
conversation = @me.all_conversations.order("conversation_id DESC").first

# ~/real-world-rails/apps/canvas-lms/spec/apis/v1/conversations_api_spec.rb:887:52: C: [Correctable] Rails/OrderArguments: Prefer conversation_id: :desc instead.
conversation = @me.all_conversations.order("conversation_id DESC").first

# ~/real-world-rails/apps/canvas-lms/spec/apis/v1/conversations_api_spec.rb:1078:111: C: [Correctable] Rails/OrderArguments: Prefer conversation_id: :desc instead.
conversation = @me.all_conversations.order(Conversation.nulls(:first, :last_message_at, :desc)).order("conversation_id DESC").first

# ~/real-world-rails/apps/canvas-lms/spec/apis/v1/conversations_api_spec.rb:1189:52: C: [Correctable] Rails/OrderArguments: Prefer conversation_id: :desc instead.
conversation = @me.all_conversations.order("conversation_id DESC").first

# ~/real-world-rails/apps/canvas-lms/spec/apis/v1/submissions_api_spec.rb:4656:49: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
expect(submission.submission_comments.order("id DESC").first).to be_hidden

# ~/real-world-rails/apps/canvas-lms/spec/apis/v1/submissions_api_spec.rb:4681:49: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
expect(submission.submission_comments.order("id DESC").first).not_to be_hidden

# ~/real-world-rails/apps/canvas-lms/spec/apis/v1/submissions_api_spec.rb:4701:49: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
expect(submission.submission_comments.order("id DESC").first).not_to be_hidden

# ~/real-world-rails/apps/canvas-lms/spec/factories.rb:65:27: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
scope = klass.order("id DESC").limit(records.size)

# ~/real-world-rails/apps/canvas-lms/spec/models/active_record_base_spec.rb:143:46: C: [Correctable] Rails/OrderArguments: Prefer :e_id instead.
.joins(:enrollments).order("e_id asc")

# ~/real-world-rails/apps/canvas-lms/spec/models/discussion_entry_spec.rb:448:102: C: [Correctable] Rails/OrderArguments: Prefer :id instead.
expect(DiscussionEntry.unread_for_user_before(@student, Time.utc(2013, 3, 13, 10, 11)).order("id").map(&:message)).to eq(["entry 2", "entry 3"])

# ~/real-world-rails/apps/canvas-lms/spec/models/importers/course_content_importer_spec.rb:632:41: C: [Correctable] Rails/OrderArguments: Prefer :position instead.
expect(@module.content_tags.order("position").pluck(:content_type)).to eq(%w[ContextModuleSubHeader Assignment])

# ~/real-world-rails/apps/canvas-lms/spec/models/importers/course_content_importer_spec.rb:656:41: C: [Correctable] Rails/OrderArguments: Prefer :position instead.
expect(@module.content_tags.order("position").pluck(:content_type)).to eq(%w[Assignment ContextModuleSubHeader])

# ~/real-world-rails/apps/canvas-lms/spec/models/importers/course_content_importer_spec.rb:667:41: C: [Correctable] Rails/OrderArguments: Prefer :position instead.
expect(@module.content_tags.order("position").pluck(:content_type)).to eq(%w[ContextModuleSubHeader Assignment])

# ~/real-world-rails/apps/canvas-lms/spec/models/outcome_proficiency_spec.rb:23:91: C: [Correctable] Rails/OrderArguments: Prefer points: :desc, id: :asc instead.
it { is_expected.to have_many(:outcome_proficiency_ratings).dependent(:destroy).order("points DESC, id ASC").inverse_of(:outcome_proficiency) }

# ~/real-world-rails/apps/canvas-lms/spec/selenium/helpers/collaborations_specs_common.rb:44:32: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
expect(Collaboration.order("id DESC").last.title).to eq new_title

# ~/real-world-rails/apps/canvas-lms/spec/selenium/helpers/collaborations_specs_common.rb:69:32: C: [Correctable] Rails/OrderArguments: Prefer id: :desc instead.
expect(Collaboration.order("id DESC").last).to be_deleted

@koic
Copy link
Member

koic commented Aug 1, 2025

As this is due to a stylistic convention, it would be worth documenting in the Rails style guide:
https://github.com/rubocop/rails-style-guide

@lovro-bikic
Copy link
Contributor Author

Style guide PR: rubocop/rails-style-guide#366

@lovro-bikic lovro-bikic force-pushed the rails-order-arguments branch from 172592c to 249c743 Compare August 1, 2025 12:23
@lovro-bikic
Copy link
Contributor Author

Fixed all comments. I also added a link to the style guide and some specs for case insensitivity for column names and direction.

@koic koic merged commit 64626d2 into rubocop:master Aug 2, 2025
16 checks passed
@lovro-bikic lovro-bikic deleted the rails-order-arguments branch August 2, 2025 19:02
viralpraxis added a commit to viralpraxis/rubocop-rails that referenced this pull request Aug 11, 2025
ref: rubocop#1501

```shell
echo 'User.order("1")' | bundle exec rubocop --stdin bug.rb -A --only Rails/OrderArguments
Inspecting 1 file
F

Offenses:

bug.rb:1:12: C: [Corrected] Rails/OrderArguments: Prefer :1 instead. (https://rails.rubystyle.guide/#order-arguments)
User.order("1")
           ^^^
bug.rb:1:13: F: Lint/Syntax: invalid symbol
(Using Ruby 3.4 parser; configure using TargetRubyVersion parameter, under AllCops)
User.order(:1)

bug.rb:1:13: F: Lint/Syntax: unexpected integer; expected a ) to close the arguments
(Using Ruby 3.4 parser; configure using TargetRubyVersion parameter, under AllCops)
User.order(:1)
            ^
bug.rb:1:14: F: Lint/Syntax: unexpected ')', expecting end-of-input
(Using Ruby 3.4 parser; configure using TargetRubyVersion parameter, under AllCops)
User.order(:1)
             ^

1 file inspected, 4 offenses detected, 1 offense corrected
====================
User.order(:1)
```

The same happens for these cases:

```
order("1 ASC")          # => User.order(:1)
order("1 DESC")         # => User.order(1: :desc)
order("id ASC, 2 DESC") # => User.order(:id, 2: :desc)
```

`order("1")` can be autocorrected to `order(1)`, but this can be done
separately.
viralpraxis added a commit to viralpraxis/rubocop-rails that referenced this pull request Aug 11, 2025
ref: rubocop#1501

```shell
echo 'User.order("1")' | bundle exec rubocop --stdin bug.rb -A --only Rails/OrderArguments
Inspecting 1 file
F

Offenses:

bug.rb:1:12: C: [Corrected] Rails/OrderArguments: Prefer :1 instead. (https://rails.rubystyle.guide/#order-arguments)
User.order("1")
           ^^^
bug.rb:1:13: F: Lint/Syntax: invalid symbol
(Using Ruby 3.4 parser; configure using TargetRubyVersion parameter, under AllCops)
User.order(:1)

bug.rb:1:13: F: Lint/Syntax: unexpected integer; expected a ) to close the arguments
(Using Ruby 3.4 parser; configure using TargetRubyVersion parameter, under AllCops)
User.order(:1)
            ^
bug.rb:1:14: F: Lint/Syntax: unexpected ')', expecting end-of-input
(Using Ruby 3.4 parser; configure using TargetRubyVersion parameter, under AllCops)
User.order(:1)
             ^

1 file inspected, 4 offenses detected, 1 offense corrected
====================
User.order(:1)
```

The same happens for these cases:

```
order("1 ASC")          # => User.order(:1)
order("1 DESC")         # => User.order(1: :desc)
order("id ASC, 2 DESC") # => User.order(:id, 2: :desc)
```

`order("1")` can be autocorrected to `order(1)`, but this can be done
separately.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants