2

特定の条件が満たされたときに要素をクリックすると、facebox リンクを表示したい。条件が満たされない場合、ユーザーにクリックしてほしくありません。私はそれを達成するためにこのようなことをしていますが、これはかなり醜いです

<% if x == 5 %>
    <a id="something" href="http://www.some_weird_link.com" rel="facebox">
<% end %>
<div>
    <!-- Loads of HTML and erb code here which should be shown no matter what condition -->
</div>

<% if x == 5 %>
    </a>
<% end %>

</a>条件が満たされない場合に HTML に入らないように、if 条件を配置する必要があることに注意してください。これは見栄えが悪いです。これを行うためのより良い方法を提案できますか?

link_to_if有望ですが、私の場合はたまたま大きいパラメーターにリンク表示テキストを入れてほしいと思っています<div>

4

3 に答える 3

4

私はいくつかの異なるケースを試しましたが、これは機能します (オプション :if => false を渡すとリンクしません。:if => true を渡すとリンクが作成されます。または、if オプションをまったく渡さない場合) )

ヘルパーを定義します。

  def facebox( *args , &block )
    if !args.last.is_a?(Hash) || args.last.fetch(:if,true)
      link_to *args , &block
    else
      block.call
    end
  end

そのヘルパーを取得したら、いつでも facebox リンク メソッドを使用したい場合 (特別な facebox 引数をすべて使用して肉付けすることもできます。たとえば、その rel をヘルパーに移動して、ビューをクリーンアップすることができます)。 )

次に、ビューでこれを行うことができます:

  <% facebox 'http://www.some_weird_link.com' , :id => 'something' , :rel => 'facebox' , :if => (x == 5) do %>
    <div>
      <!-- Loads of HTML and erb code here which should be shown no matter what condition -->
    </div>
  <% end %>
于 2010-06-28T11:21:31.513 に答える
1

試す

<%= "<a id='something' href='http://www.some_weird_link.com' rel='facebox'>" if x == 5 %>
<div>
    <!-- Loads of HTML and erb code here which should be shown no matter what condition -->
</div>


<%= " </a> " if x == 5 %>
于 2010-06-28T10:55:38.167 に答える
0

私があなたの質問を正しく理解したなら、これはトリックをするはずです:

<%= ((x == 5) ? (link_to 'facebook', 'http://www.some_weird_link.com', :id => 'abc', :rel => 'facebox') : '') %>

<div>
    <!-- Loads of HTML and erb code here which should be shown no matter what condition -->
</div>
于 2010-06-28T16:24:31.807 に答える