2011-12-26 6 views
0

パイプでいくつかのリンクを連結したいと思います。しかし、すべてのリンクはif文で囲まれています。パイプでlink_toを連結します。

例:

- if condition1 
    = link_to link1 

- if condition2 
    = link_to link2 

- if condition3 
    = link_to link3 

条件1及び2に該当する場合、結果はこれを行う方法を

link1 | link2 

任意のヒントすべきですか?

答えて

0

私はその目的のためにそのようななめらかを使用します。

= [[l1, c1], [l2, c2], [l3, c3]].map{ |l, c| link_to(l) if c }.compact.join('|') 

または

= [(link_to(l1) if c1),(link_to(l2) if c2),(link_to(l3) if c3)].compact.join('|') 

最後のものは少し不器用ですが、それは好みの問題です。どちらも完全に不要なリンクを除外し、残りの部分を|で結合します。

あなたの条件が自明ではなく、それらのかなりの数がある場合は、そのロジックをコントローラの外に動かすか、ヘルパー(状況に応じて)に移動する方がよいでしょう。あなたがリンクを表示すべきか否かをテストするためのいくつかの一般的な方法を持っている場合

そして、のは、show?(link)ヘルパーは、その後、物事は少し立派になりましょう、あなたはそのようにそれを行うことができます。

= [l1, l2, l3, l4].map{ |l| link_to(l) if show?(l) }.compact.join('|') 

またはそのような:

= [l1, l2, l3, l4].select{ |l| show?(l) }.map{ |l| link_to(l) }.join('|') 
+0

素晴らしい – ding280

関連する問題