如何通过方法调用传递阻止?

Und*_*ion 1 ruby ruby-on-rails block helper link-to

我需要一个帮助器,它生成一个包含在<li>包含活动类的链接.

没有支持块这很容易:

  def nav_item(*args, &block)
    url = args[1]
    clazz = 'active' if current_page?(url)

    content_tag(:li, :class => clazz) do
      link_to(*args)
    end
  end
Run Code Online (Sandbox Code Playgroud)

但就像link_to我希望我的助手支持用于定义内容的块一样.使用link_to,我可以这样做:

那么如何在我的助手中支持相同的内容呢?

我需要做的就是将块传递给link_to.我目前的尝试

  def nav_item(*args, &block)
    url = if block_given?
      args.first
    else
      args[1]
    end
    clazz = 'active' if current_page?(url)
    content_tag(:li, :class => clazz) do
      if block_given?
        # What goes here?
      else
        link_to(*args)
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

bun*_*cia 5

您可以将块传递给link_to最后一个arg.像这样:

def nav_item(*args, &block)
  url = if block_given?
    args.first
  else
    args[1]
  end
  clazz = 'active' if current_page?(url)
  content_tag(:li, :class => clazz) do
    if block
      link_to(*args, &block)
    else
      link_to(*args)
    end
  end
end                         
Run Code Online (Sandbox Code Playgroud)