在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
集合进行不区分大小写排序?
答案 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 %>