ruby-on-rails 在Ruby on Rails中按日期降序排序

f87krz0w  于 2023-02-26  发布在  Ruby
关注(0)|答案(2)|浏览(199)

我想排序我的列表在降序由日期作为“新用户列表”,在数据库中,我有一列是

t.datetime "created_at",                                      null: false

这是一个新用户注册的时候,在视图中,我有这样的代码:

%table.table.table-striped.table-hover
      %thead
      %h3 New Users
      %hr
        %th Name
        %th Company
        %th Role
        %th Created date
        %th{:width => '50'}
        %th{:width => '50'}
        %th{:width => '50'}
      %tbody
      - @users.each do |user|
        -if user.role == "trial-member"
          - @created_at.sort{|a,b| b.created_at <=> a.created_at}.each do |created_at|
            %tr
            %td
              = user.first_name
              = user.last_name
            %td= user.company
            %td= user.role
            %td= user.created_at
            %td= link_to 'Approve', edit_user_path(user),  {:class => 'btn btn-success btn-sm'}

但是这会产生一个错误“undefined method 'sort' for nil:NilClass”,我应该怎么做才能按创建日期降序排序表中的列表呢?谢谢。

mrphzbgm

mrphzbgm1#

在控制器中:

@users = User.order('created_at DESC')

只需在获取@users的逻辑中添加:order('created_at DESC')
在您看来,现在可以摆脱- @created_at.sort{|a,b| b.created_at <=> a.created_at}.each

%h3 New Users
%table.table.table-striped.table-hover
  %thead
    %tr
      %th Name
      %th Company
      %th Role
      %th Created date
      %th{:width => '50'}
      %th{:width => '50'}
      %th{:width => '50'}
  %tbody
    - @users.each do |user|
      -if user.role == "trial-member"
        %tr
          %td
            = user.first_name
            = user.last_name
          %td= user.company
          %td= user.role
          %td= user.created_at
          %td= link_to 'Approve', edit_user_path(user),  {:class => 'btn btn-success btn-sm'}

您看到的错误是因为@created_at不是可枚举对象,因此它不响应sort

axr492tv

axr492tv2#

这是因为@created_at在任何地方都没有定义,所以任何没有定义的示例变量默认返回nil,如果你想按排序顺序显示用户,那么你需要按顺序获取@users

@users = User.order(created_at: :desc)

相关问题