Ruby on rails 一些具有变换域的模型如何对_进行排序?

Ruby on rails 一些具有变换域的模型如何对_进行排序?,ruby-on-rails,ruby-on-rails-4,sql-order-by,Ruby On Rails,Ruby On Rails 4,Sql Order By,我有一个名为“带段塞字段的主题”的模型 我有一个哈希,每个slug都有经过转换的文本 names: { foo: 'cell', bar: 'yetto', baz: 'azkaban' } 我需要按名称排序,但数据库中不存在名称字段,只有“slug” 在本例中,结果应为: baz => Azkaban foo => Cell bar => Yetto 此刻 Topic.all.order(slug: :asc) Bar => yetto B

我有一个名为“带段塞字段的主题”的模型

我有一个哈希,每个slug都有经过转换的文本

names: {
    foo: 'cell',
    bar: 'yetto',
    baz: 'azkaban'
}
我需要按名称排序,但数据库中不存在名称字段,只有“slug”

在本例中,结果应为:

baz => Azkaban
foo => Cell
bar => Yetto
此刻

Topic.all.order(slug: :asc)

Bar => yetto
Baz => azkaban
Foo => cell

那么,如何使用转换字段进行排序呢?

首先,反转
名称
,然后在
主题的集合上使用
排序依据

inverted_names = names.invert

Topics.all.sort_by{ |a| inverted_names[a[:slug]] }
这将生成所有主题的集合,并按映射排序。例如,给定一个集合

collection = [
  { title: "Banana", slug: "cell" },
  { title: "Orange", slug: "azkaban" },
  { title: "Apples", slug: "yetto" }
]
上面的
排序依据将产生以下结果

[
  {:title=>"Apples", :slug=>"yetto"}, 
  {:title=>"Orange", :slug=>"azkaban"}, 
  {:title=>"banana", :slug=>"cell"}
]

您是否将
slug
作为散列存储在数据库中?@papirtiger您是什么意思?slug是以DB为单位的字符串。(例如:slug='foo',转换后的名称是'cell')简单地:
Topic.all.sort_by{t|names[t.slug.to_sym]}
Thx。对不起,我很难理解键或值是否是您的slug:)