中间人标签排序不区分大小写

时间:2017-03-18 19:18:23

标签: arrays ruby sorting tags middleman

在Middleman静态站点生成器中,对tags数组进行排序区分大小写。大写字母在小写之前排序,如:“A,B,C,a,b,c”使用代码时:

<% blog.tags.sort.each do |tag, articles| %>
<% end %>

似乎我应该能够使用Ruby的sort_by(&:downcase),例如:

<% blog.tags.sort_by(&:downcase).each do |tag, articles| %>
<% end %>

但这会产生错误:

  

NoMethodError

     

#&lt; Array:0x007fc4baac00b8&gt;

的未定义方法`downcase'

如何对tags集合进行不区分大小写排序?

2 个答案:

答案 0 :(得分:1)

blog.tags实际上是在一个数组中返回多个ruby对象。所以错误  未定义的方法&#34; downcase&#39; for Array:0x007fc4baac00b8是因为blog.tags看起来类似于下面的内容。

[
 #<Array:0x007f9a41300cb8 id: 5, name: "Ruby">,
 #<Array:0x007f9a41300cb8 id: 5, name: "Ruby">,
]

我不肯定你在标签上使用活动记录,但你可以在Tags模型类中订购它们。

 class Tag < ActiveRecord::Base
  scope :order_by_name, -> { order('LOWER(name)') }
 end

 # erb 
 <% blog.tags.order_by_name.each do |tag, articles| %>
 <% end %>

答案 1 :(得分:0)

这种不区分大小写的排序:sort{|a,b| a.to_s.downcase <=> b.to_s.downcase}

应用于erb文件中的Middleman Tag类实例:

<% blog.tags.sort{|a,b| a.to_s.downcase <=> b.to_s.downcase}.each do |tag, articles| %>
<% end %>