Rails没有按(西里尔字母)字母排序子元素

时间:2017-12-26 13:32:59

标签: ruby-on-rails collation

无论我尝试什么,我都无法通过标题进行排序。这是当前输出 - http://take.ms/M3W2Z,基本上A在N之后,B在A和N之后等等。

我的模特:

class Manufacturer < ApplicationRecord
  has_many :products
end

class Product < ApplicationRecord
  belongs_to :manufacturer
  scope :by_alphabet, -> { order('title DESC' ) }
end

我的观点:

-@manufacturer.products.by_alphabet.each do |product|
  =product.title

我试过scope :by_alphabet, -> { order('products.title DESC') },但它也没有帮助。

我错过了一些如此明显的东西吗?它只是一个简单的排序......或者它是关于西里尔字母的问题?我尝试用俄语字母对一个简单的数组进行排序 - 它就像一个魅力。

1 个答案:

答案 0 :(得分:0)

在这种情况下,当数据库完成排序时,您需要为查询(使用collation)或在表上(通过架构)设置COLLATE )。默认的排序规则不太可能是西里尔字母的正确排序规则。您需要检查哪些归类可用于您的数据库,但是您可能可以摆脱类似这样的情况:

scope :by_alphabet, -> { order('title DESC COLLATE utf8_ru_ci' ) }

有关所有详细信息,请咨询您正在使用的数据库的文档,因为每个数据库的信息可能略有不同。