2016-03-18 73 views
3

我想按日期排序,我在降序列表,它作爲一個「新用戶列表」,在數據庫中我有一列是按日期排序在Ruby中降序排列軌

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'} 

,但是這給了「爲無未定義的方法`排序」:NilClass」的錯誤,我拿什麼是否按創建日期降序對錶中的列表進行排序?謝謝。

+0

對於那些低估了這個問題的人,請向提問的人提供可操作的反饋,以便他們改進。讓我們的社區更加棒! – Justin

回答

12

在你的控制器:

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

只需添加:order('created_at DESC')在你的邏輯,你要提取@users

在您看來,您現在可以擺脫掉- @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迴應。

+1

你也可以使用'User.order(created_at :: desc)' –