Ruby on rails 仅当满足条件时,如何使用块创建链接到?
仅当满足以下条件时,我才希望渲染链接如果,则渲染链接:Ruby on rails 仅当满足条件时,如何使用块创建链接到?,ruby-on-rails,Ruby On Rails,仅当满足以下条件时,我才希望渲染链接如果,则渲染链接: <%= link_to_if policy(@user.add?), new_entry_path(), class: 'btn' do %> <%= glyphicon("plus") %> <% end %> 只有在满足链接到
<%= link_to_if policy(@user.add?), new_entry_path(), class: 'btn' do %>
<%= glyphicon("plus") %>
<% end %>
只有在满足链接到
)时,才应调用带有glypicon(“plus”)
helper方法的块。对于上面的代码,无论条件是真是假,始终调用块
只有当条件返回true时,我如何创建链接及其内部内容?此方法的块是“默认”行为,它相当于
if
语句中的else
。以下是消息来源:
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
def link_to_if(条件、名称、选项={}、html_选项={}、&block)
如果条件
链接到(名称、选项、html选项)
其他的
如果给出了block_?
block.arity只要使用一个简单的if
和一个链接到
:
<% if policy(@user.add?) %>
<%= link_to new_entry_path, class: 'btn' do %>
<%= glyphicon('plus') %>
<% end %>
<% end %>
可在中用于查看,如:
<%= link_to_add(new_entry_path) if policy(@user.add?) %>
<%= icon_link('plus', new_entry_path) if policy(@user.add?) %>
可在中用于查看,如:
<%= link_to_add(new_entry_path) if policy(@user.add?) %>
<%= icon_link('plus', new_entry_path) if policy(@user.add?) %>
正如@Anthony所指出的,如果条件为false,它将使用块来确定输出,类似于else语句
如果未给出任何块,“名称”值将在没有锚定标记的情况下呈现。为了避免这种情况,您可以像这样传递一个空块
<%= link_to_if(policy(@user.add?),glyphicon('plus'),new_entry_path,class: 'btn') {} %>
由于遵循的是块,并且块返回nil
,因此将不会呈现任何内容,但显然,对这里发生的事情的解释与@spickermann提供的答案相比有很大差距 如果您希望以任何方式显示块,但仅在满足某个条件时添加链接,则可以同时捕获块:
我想得太远了。。。你对我如何用尽可能少的代码实现目标有什么建议吗?无论如何谢谢你!我一直在寻找一个尽可能少的代码行的解决方案,我可以写你的更短吗?谢谢,这是我需要的方法!仍在学习Rails。感谢您的贡献,我现在了解了link\u to\u(如果
真的有效的话)是如何工作的。如果条件为false,且未提供任何块,则会呈现名称,这是我不理解的行为。请参阅Rails Github上的线程,了解有关此默认行为的详细信息,以及我个人对其错误原因的看法: