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