如果条件为假,如何使用相同的link_to_unless块?

时间:2014-05-14 11:46:11

标签: ruby-on-rails ruby erb

如果条件为真,我怎么能使用link_to_unless的相同块(代替示例中的'Hello'),而不是将块写两次(带if ... else)?

<%= link_to_unless(url.nil?, 'Hello') do %>
  <%= image_tag(image_url) %>
  <h1><%= title %></h1>
  <h2><%= subtitle %></h2>
<% end %>

如果url存在

,我想拥有此功能
<a href="url">
  <img src ... />
  <h1>...</h1>
  <h2>...</h2>
</a>
如果urlnil

,则

和没有链接的相同内容

<img src ... />
<h1>...</h1>
<h2>...</h2>

1 个答案:

答案 0 :(得分:2)

你实际上可以像这样创建一个帮助方法

在你的application_helper.rb中:

def conditional_link(options={}, &block)
    unless options.delete(:hide_link)
        concat content_tag(:a, capture(&block), options)
    else
        concat capture(&block)
    end
end

在你看来:

<% conditional_link(:hide_link => url.nil?, :href => "/hello" ) do %>
    <%= image_tag(image_url) %>
    <h1><%= title %></h1>
    <h2><%= subtitle %></h2>
<% end %>

假设您的url.nil?通过返回布尔值

正常工作

您当然可以向链接传递更多选项,例如类或ID:

<% conditional_link(:hide_link => url.nil?, :href => "/hello", :class => "myclass", :id => "myid" ) do %>
    <%= image_tag(image_url) %>
    <h1><%= title %></h1>
    <h2><%= subtitle %></h2>
<% end %>