2013-05-15 105 views
0

我想要的字母順序顯示用戶表的全部,我知道這需要在控制器來完成: 我一直在用我的控制器,該代碼:Rails的顯示錶按字母順序

class UsersController < ApplicationController 
@users = User.find(:all) 
@users.sort! { |a,b| a.name.downcase <=> b.name.downcase } 
... 
end 

形式代碼:

<% @users.each do |user| %> 
    <tr> 
     <td><%= user.name %></td>  
    </tr> 
<% end %> 

接收對於零誤差未定義的方法`downcase」:NilClass

我錯過了什麼?謝謝。

回答

1

您應該爲查詢添加一個訂單子句。

@users = User.reorder(:name) 

我不知道你要什麼,但如果你有用戶的顯著數量很可能需要添加限制或分頁到這一點。

+0

那會晚一點,只是現在用鐵軌潤溼我的腳。 我似乎缺少,我添加了行,並收到錯誤 未定義的方法'each'爲零:NilClass – Derptacos

1

你有一個沒有名字的用戶,這就是爲什麼你有這個錯誤。 可避免與

@users.sort! { |a,b| a.name.try(:downcase) <=> b.name.try(:downcase) } 

是錯誤,但它是一個醜陋的解決方案,正確的方法是這樣做,直接在查詢

User.order("name") 
0

其實我覺得這應該屬於模型,我認爲,將使您的控制器代碼更具可讀性。

,並具有範圍將讓你的條件鏈能,閱讀更多關於scope

假設u有軌3.X

#users model 
class User < ActiveRecord::Base 
    scope :asc_by_name, lambda { 
    {:order => 'name ASC'} 
    } 
end 

#users controller 
@users = User.asc_by_name 

,並在你的循環使用,

<% @users.each do |user| %> 
    <tr> 
     <td><%= user.try(:name) %></td>  
    </tr> 
<% end %> 
+0

我試過你的解決方案,雖然我收到一個錯誤未定義的方法'each'爲零:NilClass 但是當我做User.order('name')。每個做...它工作正常...我是我搞砸了 – Derptacos

+0

@Devo,對不起有一個錯誤的範圍,只是現在檢查,順便說一句,你有錯誤,因爲'@用戶'是零 – sameera207

0

你數據庫引擎通常更適合排序,所以我會在查詢中排序:

@user = User.order(:name) 

將爲您提供按name列排序的所有對象User。這也會起到同樣的作用:

@user = User.find(:all, order: :name)