我在控制器中执行此查询,而“组”模型has_many用户
@group= Group.find(params[:id])
@group用于呈现此部分(部分用户将组转移到表中)
<%= render :partial=>"user_list", :locals=>{:users=>@group.users} %>
传递给partial的局部变量'users'是一个User对象数组;
- !ruby/object:User
attributes:
updated_at: 2011-01-04 21:12:04
firstname: Bob
lastname: Smith
id: "15"
group_id: "2"
created_at: 2010-11-26 12:54:45
如何通过'lastname'对用户数组进行排序?没试过,我尝试了几种不同的方法。试图按照数组中的对象属性进行排序让我感到困惑。另外,我不知道如何通过以下方式执行此操作:查询中的顺序(如何:不是命令组而是命令每个组的用户)?
也许我没有正确引用对象的名称('用户')?看起来这应该是有效的,因为它会产生'无方法'错误(如果没有使用'sort_by',则会产生动态常量赋值错误!):
users.sort_by! {|User| User.lastname}
感谢您的帮助。
答案 0 :(得分:35)
我发现了一种适用于here的方法。我不明白“&amp;”是什么符号正在做 - 也许它是“对象”的缩写,因为在我的情况下“:lastname”是构成数组的对象的属性。
users = users.sort_by &:lastname
注意:我没有说明原因,但破坏性版本不起作用。它产生一个“未定义的方法`sort_by!'对于#“errror:
users.sort_by! &:lastname
答案 1 :(得分:30)
请参阅http://ariejan.net/2007/01/28/ruby-sort-an-array-of-objects-by-an-attribute/
@users.sort! { |a,b| a.name.downcase <=> b.name.downcase }
答案 2 :(得分:15)
这可能是因为|User|
是一个班级时你已经User
了。尝试将其更改为未使用的变量名称,例如u
,以获取:
users.sort_by! {|u| u.lastname}
管道之间的术语是每个项目存储在其中的变量的名称,而不是您所拥有的对象类型。这与其他Ruby块相同,例如do || end
或任何其他{||}
样式块。
答案 3 :(得分:2)
您可以尝试在群组模型中的“has_many:users”行中添加订单子句