2

当满足特定条件时单击元素时,我想显示一个 Facebook 链接。如果条件不满足,我不希望用户点击。我正在做这样的事情来实现它,这非常难看

<% 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 %>

请注意,我必须设置一个 if 条件,以便</a>在不满足条件时不会出现在我的 HTML 中。这看起来很糟糕。你能建议我一个更好的方法吗?

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

一旦你有了那个助手,任何时候你想使用你的脸框链接方法(你最好用所有特殊的脸框参数来充实它——例如,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 回答