2017-02-02 13 views
0

У меня есть следующие перечислимы, чтобы выбрать изделия на основе категории (HAML)Рубин перечислимы выбрать с дополнительным лимитом/найти

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

Я хочу, чтобы иметь возможность ограничить этот вызов, но необязательно, то есть вернуть 2 или, может быть, вернуть все

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

т.е. с введением первой (2)

Но необязательно делать что-то вроде первого («все») или первый() не представляется возможным

Благодаря

+1

Вы не должны быть зубрежки столько логики в вашей точки зрения. Вы можете использовать scope/method для вашей модели для обработки части 'select' и помощника для обработки условной логики' first (2) '/' all'. Обратите внимание, что 'first ('all')' не имеет смысла, если вы хотите 'all', тогда просто опустите вызов'. First '. – meagar

+0

@meagar является правильным. Что такое 'blog (...)'? Является ли 'articles' a отношением ActiveRecord? Вероятно, есть намного более чистые способы достижения того, чего вы хотите, без определения одного нового метода. –

ответ

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

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

Использование:

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

или

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

 Смежные вопросы

  • Нет связанных вопросов^_^