2017-02-02 37 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

你不應該臨時抱佛腳這麼多的邏輯到您的視圖。你可以在你的模型上使用範圍/方法來處理'select'部分和一個幫助器來處理'first(2)'/'all'的條件邏輯。注意'first('all')'沒有任何意義,如果你想'all',那麼就省略'.first'調用。 – meagar

+0

@meagar是對的。什麼是「博客(...)」? 'articles'是一個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')