ruby-on-rails - 不区分大小写 default_scope :order?

标签 ruby-on-rails ruby postgresql activerecord rails-activerecord

我在 mysql 下通过了以下测试(使用 FactoryGirl):

  test "order by title" do
    @library = create(:drawing_library, title: 'Accessories')
    @drawing = create(:drawing, drawing_library: @library, title: 'Test Drawing')
    create(:drawing, drawing_library: @library, title: 'z')
    create(:drawing, drawing_library: @library, title: 'm')
    create(:drawing, drawing_library: @library, title: 'b')

    str = ''
    @library.drawings.each do |dwg|
      str += dwg.title
    end

    assert_equal 'bmTest Drawingz', str
  end

绘图模型是:

class Drawing < ActiveRecord::Base
  belongs_to :drawing_library
  default_scope order: :title
  ..
end

在 postgresql 下,这个测试现在失败了:

<"bmTest Drawingz"> expected but was
<"Test Drawingbmz">.

这似乎是因为“测试图”中的 T 是大写的。如果我将其更改为“测试绘图”,则测试通过。

有没有办法让 default_scope order 不区分大小写?

最佳答案

您可以将默认范围更改为按小写标题排序:

default_scope order: 'lower(title)'

或者,如果你喜欢大喊大叫,你可以改用大写字母:

default_scope order: 'upper(title)'

无论您使用的是哪个数据库或它有什么配置设置,这应该几乎相同(除非您的数据库配置为使用有趣的排序规则)。

如果您希望此默认范围参与连接,您可能希望包含表名。

关于ruby-on-rails - 不区分大小写 default_scope :order?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12047768/

相关文章:

ruby-on-rails - 使用 Sidekiq 时由对等方重置连接

javascript - Angular Devise 非加密密码

Ruby 的 Time.strftime %P 选项不起作用?

arrays - 如何在postgresql中提取json数组元素

c - 在 C (libpq) 中使用 postgresql 插入整数数组

当我按上/下使用不同的顺序时出现 SQL 错误

mysql - 如何使用 MySQL 在同一行中显示以前的数据?

javascript - 将 JSON 对象从 Rails Controller 发送到 Javascript

ruby - 使用 rvm 离线安装 Ruby

ruby-on-rails - 通过 YAML 文件中的循环在 Rails 中动态生成装置