Rails:满足条件时的Facebox链接

时间:2010-06-28 10:40:17

标签: ruby-on-rails ruby refactoring hyperlink facebox

当我在满足特定条件时单击元素时,我想显示一个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 %>

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

link_to_if很有希望,但是我希望我将链接显示文本放在参数中,这在我的案例中恰好是一个很大的<div>

3 个答案:

答案 0 :(得分:4)

我尝试了几种不同的情况,这样可行(如果您通过选项将不会链接:if =&gt; false,如果您通过,则会创建链接:if =&gt; 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 %>

答案 1 :(得分: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 %>

答案 2 :(得分: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>