ruby-on-rails 如何按名称对@ users.person.name进行排序?(Ruby on Rails)

wdebmtf2  于 5个月前  发布在  Ruby
关注(0)|答案(2)|浏览(52)

我尝试按名称顺序对@用户进行排序。我该如何做?
电子users.person.name
编辑:这是我如何解决这个问题:@users.sort!{|a、B|a.person.name <=> b.person.name}
谢谢num 8 er

bn31dyow

bn31dyow1#

如果你使用#sort!而不是#sort,你需要有一个很好的理由; #sort更好,除非你需要#sort!
请考虑以下代码:
如果你不知道为什么第5行显示的值与第3行不同,那么我建议你避免使用#sort!,否则,你可能会产生一些很难发现的bug。

xlpyo6sf

xlpyo6sf2#

你可以使用sort,但这需要先获取所有的用户。如果有很多用户,这会占用很多内存。
相反,您可以在数据库中进行排序,并根据需要按顺序获取它们。

@users = User
  .joins(:person)        # join by the model name
  .order("people.name")  # order by the table name

# find_each is more efficient than each for large sets
@users.find_each do |user|
  ...do something with each user...
end

字符串
你可以把它放在一个范围内使用任何地方。

class User
  scope :by_name, ->() { joins(:person).order("people.name") }
end

# Find the first 10 users, ordered by their name.
@users = User.by_name.limit(10)

相关问题