Ruby on rails 一些具有变换域的模型如何对_进行排序?
我有一个名为“带段塞字段的主题”的模型 我有一个哈希,每个slug都有经过转换的文本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
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:)