【发布时间】:2025-12-16 06:40:01
【问题描述】:
使用 Ransack gem,我正在尝试对索引页面上的简单列表进行排序。但是,排序字段name 中同时存在大写和小写值。为了使它们排序有用,排序应该不区分大小写。
这是模特Vendor:
name:string, email:string, address:string, phone:string, fax:string
这是控制器:
class VendorsController < ApplicationController
def index
@search = Vendor.search(params[:q])
@vendors = @search.result
end
还有观点:
/index.html.slim
tr
th = sort_link @search, :name, "Name"
th = sort_link @search, :email, "Company Email"
th = sort_link @search, :address, "Address"
任何建议将不胜感激。
【问题讨论】:
-
sorted_list = vendors.sort {|a,b| a.name.downcase <=> b.name.downcase}# 试试看,如果有帮助请告诉我 -
@hd1 感谢您的快速回复!你能再给我一点吗?我尝试将它放在控制器的搜索和结果中,但没有运气。还是个新手。
-
尝试向您的模型添加一个访问器,它以小写形式返回名称并在该字段上进行搜索?
def lowercase_name name.downcase! end并配置 ransack 以使用 @search.sorts 在您的 controller 中搜索 lowercase_name 字段 -
试过了,但这对我这个级别的人来说是另一个挑战。获取虚拟属性的值很简单,但使用它进行排序似乎需要一些技巧。如果有一个很好的方法来完成这个,请与我分享一些代码......再次感谢。
-
@hd1,多亏了你的第一个建议,我至少得到了它的工作......添加答案以便有代码可以看到......
标签: sorting ruby-on-rails-4 ransack