Arrays 中间人标记排序不区分大小写
在Middleman静态站点生成器中,对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的未定义
标记
数组进行排序是区分大小写的。大写字母排在小写之前,如使用代码时的“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的codeBlog.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 %>