是否可以使用Ruby中的特定排序规则对值数组进行排序?我需要根据da_DK排序规则进行排序.
鉴于%w(Aarhus Aalborg Assens)我想['Assens', 'Aalborg', 'Aarhus']回到的阵列,这是丹麦语的正确顺序.
标准排序方法
%w(Aarhus Aalborg Assens).sort
Run Code Online (Sandbox Code Playgroud)
返回看起来像ascii顺序的东西(至少不是丹麦语顺序):
["Aalborg", "Aarhus", "Assens"]
Run Code Online (Sandbox Code Playgroud)
环境是Snow Leopard和Linux运行ruby 1.9.2和Rails 3.0.5.
ruby ruby-on-rails collation internationalization ruby-on-rails-3
我有一个旧的Rails应用程序升级到版本3.2.11,它有很多使用capybara版本1.0.1编写并使用selenium驱动程序运行的请求规范.使用database_cleaner使用截断策略在每次测试后清理数据库.
我想使用poltergeist而不是selenium并将capybara从1.0.1升级到1.1.4以便能够使用最新版本的poltergeist.只更改capybara gem(及其依赖项)引入了运行我的规范的问题.
在每个规范之后,我一直在清理处理程序中从Postgresql数据库中获得死锁错误.我的spec_helper很基本,看起来像这样:
RSpec.configure do |config|
config.mock_with :rspec
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
Run Code Online (Sandbox Code Playgroud)
我得到的错误是这样的:
An error occurred in an after hook
ActiveRecord::StatementInvalid: PG::Error: ERROR: deadlock detected
DETAIL: Process 41747 waits for AccessExclusiveLock on relation 17612 of database 16396; blocked by process 41752.
Process 41752 waits for RowExclusiveLock on relation 17529 of database 16396; blocked by process 41747.
HINT: See server log for query details.
: …Run Code Online (Sandbox Code Playgroud) 我有一个使用da_DK.utf8语言环境创建的PostgreSQL 8.4数据库。
dbname=> show lc_collate;
lc_collate
------------
da_DK.utf8
(1 row)
Run Code Online (Sandbox Code Playgroud)
当我从要在字符变化列上排序的表中选择某项时,会得到一个奇怪的行为IMO。在对结果进行排序时,PostgreSQL会忽略在值前加上前缀的破折号,例如:
select name from mytable order by name asc;
Run Code Online (Sandbox Code Playgroud)
可能会返回类似
name
----------------
Ad...
Ae...
Ag...
- Ak....
At....
Run Code Online (Sandbox Code Playgroud)
破折号前缀似乎被忽略了。
我可以通过在订购时将列转换为latin1来解决此问题:
select name from mytable order by convert_to(name, 'latin1') asc;
Run Code Online (Sandbox Code Playgroud)
我得到的预期结果是:
name
----------------
- Ak....
Ad...
Ae...
Ag...
At....
Run Code Online (Sandbox Code Playgroud)
为什么默认情况下,破折号前缀会被忽略?可以改变这种行为吗?