【问题标题】:Rails Administrate gem: How to sort records by 'Published At'?Rails Administrate gem:如何按“发布时间”对记录进行排序?
【发布时间】:2020-01-11 07:49:08
【问题描述】:

我对 Ruby on Rails 的 Administrate gem 非常陌生。 我无法按“发布时间”对帖子进行排序/排序。记录似乎是按他们的 id 而不是 published_at 日期排序的,我怎样才能让它工作?

在 Heroku 上查看示例应用程序: https://administrate-prototype.herokuapp.com/admin/blog/posts

提前致谢

【问题讨论】:

  • 快速说明:管理不是由 Heroku 提供的。恰好演示应用程序在 Heroku 上。我已编辑您的问题以正确反映这一点。
  • 我正在查看演示应用程序,但无法理解您的意思。如果我点击“Published At”,它会按此列排序。你能详细说明你看到了什么吗?提供屏幕截图可能会有所帮助。谢谢!

标签: ruby-on-rails administrate


【解决方案1】:

您正在寻找 Model.order 函数,这里是文档: https://guides.rubyonrails.org/active_record_querying.html#ordering

【讨论】:

    【解决方案2】:

    如果您有一个名为Post 的模型,在控制器函数show 或您正在使用的任何其他函数中定义它时,您可以获得如下记录,以便它按published_at 排序

    Post.order(published_at: :desc) # ActiveRecord ordering
    # OR
    Post.sort_by(&:published_at) # pure Ruby sorting implementation
    

    如果你总是希望它按 published_at 排序,你可以在Post 中使用 default_scope of rails,如下所示 -

    default_scope { order(published_at: :desc) }
    

    【讨论】:

      【解决方案3】:

      很简单,您需要修改 request.query_parameters 而不是 params 才能完成工作。


      这是一个例子

      # app/controllers/admin/users_controller.rb
      # frozen_string_literal: true
      
      module Admin
        class UsersController < Admin::ApplicationController
          before_action :default_params
      
          def default_params
            request.query_parameters[:user]             ||= {}    # change :user --> your resource
            request.query_parameters[:user][:order]     ||= :id   # your field
            request.query_parameters[:user][:direction] ||= :desc # your direction
          end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多