2017-03-18 1 views
0

Im MiddleMan-Generator für statische Sites wird beim Sortieren des tags-Arrays die Groß-/Kleinschreibung berücksichtigt. Großbuchstaben vor Kleinbuchstaben sortiert werden, wie in: "A, B, C, a, b, c", wenn Sie den Code verwenden:Middleman-Tag-Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung

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

Es scheint, wie ich in der Lage sein sollte sort_by(&:downcase) Ruby zu verwenden, wie zum Beispiel :

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

Aber das gibt Fehler:

NoMethodError

undefined method `downcase' for #<Array:0x007fc4baac00b8>

Wie kann ich insensitive Sortier Fall wird die tags Sammlung?

+2

Ich denke, Sie 'tags' nicht ein Array von Strings –

+0

@maxple Middleman Blog-Modul sein muss definiert Schlagwörter als:' @return [Array ] (nie + Null +) ' –

Antwort

1

blog.tags gibt mehrere Ruby-Objekte in einem Array zurück. So ist der Fehler nicht definierte Methode „downcase‘ für Array: 0x007fc4baac00b8, weil blog.tags ähnelt etwas wie unten

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

Ich bin nicht positiv, dass Sie auf die Stichworte aktiven Datensätze verwenden, aber man konnte sie nur bestellen. . in der Tags-Modellklasse

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

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

sortiert Dieser Fall unempfindlich: sort{|a,b| a.to_s.downcase <=> b.to_s.downcase}

zur Tag Klasseninstanz Middleman Angewandt in der erb-Datei als:

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

Dies entspricht exakt den Code des OP 'blog.tags.sort_by (&: downcase) .each do | tag, Artikel |'. Wenn das Original nicht funktioniert, wird dies auch nicht funktionieren. –

+0

'blog.tags' ist kein Array von Strings und muss mindestens ein Array als Element enthalten. Daher der Fehler. –

+0

@EricDuminil Middleman Blog Modul definiert Tags als: '@return [Array ] (nie + Nil +)' –

Verwandte Themen