2017-02-25 3 views
0

私は私のビューファイルにこのマークアップを持っている:Railsのビューで作業していない単一の行速記「が」

<ul class="nav navbar-nav navbar-right"> 
    <li class="nav-item"><a href="/merchants/list">Restaurants</a></li> 
    <li class="nav-item"><a href="#">Contact</a></li> 
    <li class="nav-item"><a href="#">Logout</a></li> 
</ul> 

は条件付きでログアウトリンクを表示するには、私は、単一のラインを入れif

<li class="nav-item"><a href="#">Logout</a></li> <% if condition %> 

これはうまくいかず、エラーが発生しました。

フルifフォームは通常

<% if condition %> <li class="nav-item"><a href="#">Logout</a></li> <% end %> 

速記は、ビューでは動作しない理由を任意のアイデアを働いていますか?

答えて

2

CASE 1:

<li class="nav-item"><a href="#">Logout</a></li> <% if condition %> 

HTML文が実行され、その後、Rubyのコードインジェクションが発生しました。上記のHTMLコードは、それに続いて という条件に構文的に関連していません。

<% '<li class="nav-item"><a href="#">Logout</a></li>'.html_safe if condition %> 

これはあなたが期待しているとおりに動作します。ここではHTMLブロックはif条件は* html_safetrue

に評価された後を実行する必要が文の一部がブロックがHTMLブロックではなく、文字列として扱われることを可能にするために必要とされています。

CASE 2:完全ifフォームはそれがfalseと評価された場合if条件は、最初に遭遇する

<% if condition %> <li class="nav-item"><a href="#">Logout</a></li> <% end %> 

正常に動作している

if間のすべてのコードとendはスキップされ、ブロックの最後から実行が継続されます。したがって、HTMLはレンダリングされません。

0

確かに、ifの前の部分はRubyの表現ではありません。 ifとは何の関係もないので、完全な形を期待しています。 とにかく、これは純粋なRubyで動作するはずですが、それほど良くありません。

<%= content_tag(:li, class: 'nav-item') { link_to('Logout', your_path) } if condition -%> 
関連する問題