我想对对象进行排序,但我希望这种排序不基于我存储在数据库中的直接值。
在数据库中有整数值1,2,3 ......但是还有一个散列,指定这些值的含义。
{1 => "a", 2 => "za", 3 => "xa"}.
因此,如果实例的值为3,则应将其排序为" xa"。我可以使用order()
方法实现此目标吗?重要的是不使用数组,而是使用ActiveRecord Relations
答案 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")
这假设到目前为止,您的哈希值包含所有可能的值,这意味着您可以迭代它并使用它们填充临时表。