Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 仅当满足条件时,如何使用块创建链接到?_Ruby On Rails - Fatal编程技术网

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上的线程,了解有关此默认行为的详细信息,以及我个人对其错误原因的看法: