【问题标题】:Sort a map in ERB File在 ERB 文件中对地图进行排序
【发布时间】:2016-06-17 06:32:00
【问题描述】:

我有一个 ERB 文件

<%=
require "json"

entries = Ci::Canonical::Language::Tag.map do |tag|
entry = {
  "code"        => tag.code,
  "description" => tag.description,
  "ordinal"     => tag.value,
}
entry
end
JSON.pretty_generate(entries)
%>

有什么方法可以在生成架构文件之前根据“代码”对 Tag.map 进行排序??

【问题讨论】:

    标签: ruby-on-rails json


    【解决方案1】:

    您要做的是根据散列的“代码”值对一个数组进行排序,其元素是散列。

    entries.sort { |a, b| a["code"] <=> b["code"] }
    

    另外,我建议您在控制器而不是视图中执行此操作。

    编辑:

    或者你可以先对标签进行排序,然后将它们映射到一个数组中

    Ci::Canonical::Language::Tag.sort_by do |a, b|
      a.code <=> b.code
    end.map do |tag|
      {
        "code"        => tag.code,
        "description" => tag.description,
        "ordinal"     => tag.value,
      }
    end
    

    【讨论】:

    • 非常感谢@Larry.....过去 24 小时一直在寻找这个......就像魅​​力一样工作:)
    • 有什么办法可以在"symbols": [ &lt;%= Ci::Canonical::Message::CollectionStrategy.map { |c| %Q{"#{c.name}"} }.join(", ") %&gt; ] 这样的行中添加这个排序代码
    • 我尝试以{ "name": "language_tag", "type": { "type": "enum", "name": "LanguageTag", "symbols": [ &lt;%= Ci::Canonical::Language::Tag.sort_by do |a,b| a.name &lt;=&gt; b.name end.map do { |l| %Q{"#{l.name}"} }.join(", ") %&gt; ] } 执行上述操作,但出现错误。
    • 您要对您的Ci::Canonical::Message::CollectionStrategyCi::Canonical::Language::Tag 进行排序吗?
    • 我想对该数组中的值进行排序:"symbols": [ &lt;%= Ci::Canonical::Language::Tag.map { |l| %Q{"#{l.name}"} }.join(", ") %&gt; ] 并且我在 erb 文件中有多个数组元素,因此这里不能使用第一种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2013-08-27
    • 1970-01-01
    • 2012-04-13
    • 2018-06-25
    相关资源
    最近更新 更多