2017-02-02 11 views
0

I私はこの通話を制限することができるようにしたいが、必要に応じて、すなわち返すルビー/見つける

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

持っているカテゴリに基づいて記事を選択することが列挙以下(HAML)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が正しいです。 'blog(...)とは何ですか? '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')