2013-05-15 58 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)