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

Arrays 中间人标记排序不区分大小写,arrays,ruby,sorting,tags,middleman,Arrays,Ruby,Sorting,Tags,Middleman,在Middleman静态站点生成器中,对标记数组进行排序是区分大小写的。大写字母排在小写之前,如使用代码时的“A、B、C、A、B、C”中所示: <% blog.tags.sort.each do |tag, articles| %> <% end %> 但这会产生错误: 命名者 未定义的方法“downcase”# 如何对标记集合进行不区分大小写的排序?blog.tags实际上在一个数组中返回多个ruby对象。那么错误是什么呢 数组0x007fc4baac00b8的未定义

在Middleman静态站点生成器中,对
标记
数组进行排序是区分大小写的。大写字母排在小写之前,如使用代码时的“A、B、C、A、B、C”中所示:

<% blog.tags.sort.each do |tag, articles| %>
<% end %>
但这会产生错误:

命名者

未定义的方法“downcase”#


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

blog.tags实际上在一个数组中返回多个ruby对象。那么错误是什么呢 数组0x007fc4baac00b8的未定义方法“downcase”是因为blog.tags与下面类似

[
 #<Array:0x007f9a41300cb8 id: 5, name: "Ruby">,
 #<Array:0x007f9a41300cb8 id: 5, name: "Ruby">,
]
[
#,
#,
]
我不确定您是否在标记上使用活动记录,但您可以在标记模型类中对它们进行排序

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

 # erb 
 <% blog.tags.order_by_name.each do |tag, articles| %>
 <% end %>
class标记{order('LOWER(name)}
结束
#雇员再培训局

此排序不区分大小写:
排序{| a,b | a.to_.s.downcase b.to_.s.downcase}

应用于erb文件中的Middleman
标记
类实例,如下所示:

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


我认为您的
标记不能是strings@maxpleMiddleman Blog模块将标记定义为:
@return[Array](never+nil+
这严格等同于OP的code
Blog.tags.sort_by(&:downcase).do | tag,articles |
。如果原始的不起作用,这也不会起作用。
blog.tags
不是字符串数组,必须至少包含一个数组作为元素。因此会出现错误。@EricDuminil Middleman blog模块将标记定义为:
@return[array](never+nil+)
@jasonturges您可以将调试器调用(如
byebug
)放入代码(甚至ERB模板)中,并在运行时检查/运行测试。
<% blog.tags.sort{|a,b| a.to_s.downcase <=> b.to_s.downcase}.each do |tag, articles| %>
<% end %>