[Rails: ActiveRecord db sort operation case insensitive]显示了如何使用ActiveRecord执行不区分大小写的排序。
Rails: ActiveRecord db sort operation case insensitive
Table.order("lower(column) DESC")
我正在使用的代码要求将列名称表示为符号,以便ActiveRecord自动将其扩展为"table"."column"
。这是必需的,因为某些查询包含带有不明列名的连接语句。
GitLab CE: app/models/concerns/sortable.rb#L19-20
scope :order_name_asc, -> { reorder(name: :asc) } scope :order_name_desc, -> { reorder(name: :desc) }
该表不能硬编码到方法中,因为它是用于几个不同表的抽象类。
有没有办法像ActiveRecord一样获取表名?
scope :order_name_asc, -> { reorder(%Q{LOWER("#{???}"."name") ASC}) }
scope :order_name_desc, -> { reorder(%Q{LOWER("#{???}"."name") DESC}) }
有没有办法一起使用符号列名和LOWER
,让ActiveRecord扩展表名?
编辑:在上一个示例中使用反引号而不是双引号修复拼写错误。
答案 0 :(得分:1)
ActiveRecord为模型提供table_name
方法。
所以
class User < ActiveRecord::Base
end
User.table_name
#=> "users"
因此,这可以在范围内使用:
scope :order_name_asc, -> { reorder(%Q{LOWER("#{table_name}"."name") ASC}) }