Rails - 基于第一个字母进行搜索和排序

时间:2011-04-09 04:08:03

标签: ruby-on-rails ruby

我想根据字母列表列出用户...即当我点击字母“A”时 应列出以字母A开头的所有用户,B,C等的相同案例

为此我使用代码

@users = User.search(params[:char])

params[:char]我传递的是字母(a,b,c,d等)。

此代码使用此字母搜索单词。

相反,我想要一个以特定字母开头的用户列表。

请您建议如何使用。

感谢。

4 个答案:

答案 0 :(得分:3)

您可能希望使用类似SQL的查询。

@users = User.all(:conditions => "name like '#{params[:char]}%'")

有关详细信息,请参阅ActiveRecord Finder MethodsMySQL Pattern Matching上的文档。 (即使您使用的是其他数据库,查询也应该非常相似。)

答案 1 :(得分:2)

对于想要按第一个字母搜索的人,您可以执行以下操作:

 Patient.where('substr(name, 1, 1) = ?', 'm')

更正:我刚刚阅读了区分大小写的注释,因此您可以将以下任何字母区分为:

 Patient.where('substr(field_name, 1, 1) = ? OR substr(field_name, 1, 1) = ?', 'C', 'c')
 # there from your controller or model can replace that with
 Patient.where('substr(name, 1, 1) = ? OR substr(name, 1, 1) = ?', letter.upcase, letter.downcase)

就是这样

答案 2 :(得分:0)

@user = User.all :conditions => ['substr(name,1,1) = ?', selected_letter]

答案 3 :(得分:0)

没有足够的声誉可以发表评论,因此要扩展 heriberto perez 答案,您可以使用lower进行区分大小写的搜索

Patient.where('substr(lower(name, 1, 1)) = ?', letter.downcase)