按数据库中不存在的值排序

时间:2014-03-20 10:42:40

标签: ruby-on-rails ruby activerecord

我想对对象进行排序,但我希望这种排序不基于我存储在数据库中的直接值。

在数据库中有整数值1,2,3 ......但是还有一个散列,指定这些值的含义。

{1 => "a", 2 => "za", 3 => "xa"}.

因此,如果实例的值为3,则应将其排序为" xa"。我可以使用order()方法实现此目标吗?重要的是不使用数组,而是使用ActiveRecord Relations

1 个答案:

答案 0 :(得分:1)

为了制作一个temp_table并用哈希值填充它,这应该可行。

sqlQuery1 = ActiveRecord::Base.connection.execute("CREATE TEMP TABLE IF NOT EXISTS hash_tmp(id integer, hash_values integer)")
sqlQuery2 = ActiveRecord::Base.connection.execute(TRUNCATE hash_tmp)
Your_hash.each do |id, value| 
   sqlQuery3 = ActiveRecord::Base.connection.execute("INSERT INTO hash_tmp(id, hash_values) VALUES (#{id}, '#{value}')")
end

您应该为您创建的临时表创建一个模型,然后您可以获取所有值(已过滤或未过滤)并按新字段排序:

@YourTemp = Yourtemp_model.all(:order=> "hash_values")

这假设到目前为止,您的哈希值包含所有可能的值,这意味着您可以迭代它并使用它们填充临时表。