我想仅在条件符合以下link_to_if
时才呈现链接:
<%= link_to_if policy(@user.add?), new_entry_path(), class: 'btn' do %>
<%= glyphicon("plus") %>
<% end %>
只有满足glypicon("plus")
的条件时,才应调用具有link_to_if
辅助方法的块。无论条件是真还是假,总是调用块上面的代码。
如果条件返回true,我如何创建链接及其内部内容?
答案 0 :(得分:4)
此方法的块是“默认”行为,它等同于else
语句中的if
。这是来源:
def link_to_if(condition, name, options = {}, html_options = {}, &block)
if condition
link_to(name, options, html_options)
else
if block_given?
block.arity <= 1 ? capture(name, &block) : capture(name, options, html_options, &block)
else
ERB::Util.html_escape(name)
end
end
end
答案 1 :(得分:2)
只需使用简单的if
和link_to
:
<% if policy(@user.add?) %>
<%= link_to new_entry_path, class: 'btn' do %>
<%= glyphicon('plus') %>
<% end %>
<% end %>
或者你可能想要考虑这样的视图辅助方法:
def link_to_add(url)
link_to(glyphicon('plus'), url, class: 'btn')
end
可以用来查看:
<%= link_to_add(new_entry_path) if policy(@user.add?) %>
或更通用:
def icon_link(icon, url)
link_to(glyphicon(icon), url, class: 'btn')
end
可以用来查看:
<%= icon_link('plus', new_entry_path) if policy(@user.add?) %>
答案 2 :(得分:1)
正如@Anthony所指出的,如果条件为假,它将使用该块来确定类似于else语句的输出。
如果没有给出块,则将在没有锚标记的情况下呈现“name”值。为了避免这种情况,您可以像这样传递一个空块
<%= link_to_if(policy(@user.add?),glyphicon('plus'),new_entry_path,class: 'btn') {} %>
由于对块的尊重和块返回nil
,所以不会呈现任何内容,但很明显,这里发生的事情的解释与@spickermann提供的答案相差甚远。
答案 3 :(得分:0)
如果您无论如何都想显示该块,但仅在满足特定条件时才添加链接,您可以完全捕获该块:
ggplot(melt(df), aes(x = variable, y = value)) +
geom_point(size = 1, color = "blue") +
xlab("age") +
ylab("freq") +
scale_x_continuous(limits = c(20, 40), breaks=c(20, 25, 30, 35, 40)) +
scale_y_continuous(limits = c(1, 5)) +
theme(plot.title = element_text(hjust = 0.5)) +
theme(axis.text.x=element_text(size=rel(0.7), angle=90))