2017-02-02 3 views
0

Ich habe die zählbaren folgenden Artikel auszuwählen, basierend auf einer Kategorie (HAML)Rubin enumerable wählt mit optionalem Limit/findet

- blog(ENV[ "site" ]).articles.select { | a | a.data[ :category ] == category }.each_with_index do | article, index | 
= index 

Ich mag diesen Aufruf begrenzen können, jedoch optional, dh 2 zurückkehren oder vielleicht Rückkehr all

- blog(ENV[ "site" ]).articles.select { | a | a.data[ :category ] == category }.first(2).each_with_index do | article, index | 
= index 

dh mit der Einführung des ersten (2)

Aber optional etwas wie zuerst tun (‚alle‘) oder den ersten() ist nicht möglich

Dank

+1

Sie sollten diese viel Logik in Ihrer Ansicht nach nicht werden pauken. Sie könnten einen Bereich/eine Methode in Ihrem Modell verwenden, um den 'select'-Teil zu bearbeiten, und einen Helfer, der die bedingte Logik von' first (2) '/' all 'behandelt. Beachten Sie, dass 'first ('all')' keinen Sinn macht, wenn Sie 'all' wollen, dann lassen Sie den' .first'-Aufruf einfach weg. – meagar

+0

@meagar hat Recht. Was ist Blog (...)? Sind 'Artikel' eine ActiveRecord-Beziehung? Es gibt wahrscheinlich viel sauberere Wege, um das zu erreichen, was Sie wollen, ohne eine einzige neue Methode zu definieren. –

Antwort

1
def some_meth(data, option) 
    raise 'Invalid option' if !option.is_a?(Integer) || option != 'all' 

    option == 'all' ? data : data.first(option) 
end 

Verbrauch:

- some_meth(blog(ENV[ "site" ]).articles.select { | a | a.data[ :category ] == category }, 2) 

oder

- some_meth(blog(ENV[ "site" ]).articles.select { | a | a.data[ :category ] == category }, 'all') 
Verwandte Themen