我在 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/