仅当满足条件时,如何创建带有块的 link_to_if?

mab*_*abu 4 ruby-on-rails

我只想在满足以下条件时呈现链接link_to_if

<%= link_to_if policy(@user.add?), new_entry_path(), class: 'btn' do %>
  <%= glyphicon("plus") %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

带有glypicon("plus")辅助方法的块也应该只在满足 的条件时才被调用link_to_if。上面的代码块总是被调用,无论条件是真还是假。

仅当条件返回 true 时,如何创建链接及其内部内容?

spi*_*ann 5

只需使用一个简单的if和一个link_to

<% if policy(@user.add?) %>
  <%= link_to new_entry_path, class: 'btn' do %>
    <%= glyphicon('plus') %>
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

或者你可能想考虑一个像这样的视图助手方法:

def link_to_add(url)
  link_to(glyphicon('plus'), url, class: 'btn')
end
Run Code Online (Sandbox Code Playgroud)

可用于查看以下内容:

<%= link_to_add(new_entry_path) if policy(@user.add?) %>
Run Code Online (Sandbox Code Playgroud)

或更通用:

def icon_link(icon, url)
  link_to(glyphicon(icon), url, class: 'btn')
end
Run Code Online (Sandbox Code Playgroud)

可用于查看以下内容:

<%= icon_link('plus', new_entry_path) if policy(@user.add?) %>
Run Code Online (Sandbox Code Playgroud)