2012-04-24 4 views
7

私はリンクでレンダリングしたい複雑なブロック(<h3><p>、...)を持っています条件に基づいてその周りをリンクします。Rails:条件に基づいてリンクの有無にかかわらずブロックを表示するには

私は約link_to_ifそのように動作します知っている:

<% link_to_if condition, name, path %> 

条件がfalse名のみがレンダリングされますされます。

そして私は&blocklink_toについて知っている:

<% link_to path do %> 
    [complex content] 
<% end %> 

私は両方の組み合わせを求めています。文が&blockを受け入れる文であり、条件がfalseであれば、ブロックがリンクなしでレンダリングされるようにします。残念ながら&blocklink_to_if文がlink_to文を好きではない作品:(

誰も私のための提案を持っていますすべてのヘルプは非常に私はこのために私自身のヘルパーを書いた

答えて

23

を高く評価されています?

def link_to_if_with_block condition, options, html_options={}, &block 
    if condition 
     link_to options, html_options, &block 
    else 
     capture &block 
    end 
    end 

<%= link_to_if_with_block true, new_model_path { "test" } %> 
<%= link_to_if_with_block true, new_model_path do %> 
    Something more complicated 
<% end %> 
+0

私はそれが好きだと思います。 – DiegoFrings

+0

私はちょうどそれが 'link_to'へのすべての異なる引数を渡すことでうまくいくのか分かりませんが、あなたがもっと洗練された何かを必要としたら、それを理解するだろうと思います; – klump

+0

Hmmm。あなたのヘルパーメソッドに何か変わったことがあります。私がヘルパーを '<%= %>'で使用すると、条件が真であればブロックは1回(リンク付きで)レンダリングされますが、条件が偽であれば2回(リンクなしで)レンダリングされます:( – DiegoFrings

3

私はちょうど組み込みのメソッドの原因を上書きしました彼らが提供するブロックの使用は本当に私たちの使用にはあまり意味がありません。ヘルパーに追加するだけで、link_to_ifはlink_toのように動作します。

def link_to_if(*args,&block) 
    args.insert 1, capture(&block) if block_given? 

    super *args 
end 
関連する問題