在Yield中替换字符串

时间:2013-07-10 01:46:38

标签: ruby-on-rails ruby replace yield

Ruby可以替换yield块中的字符串吗?例如,如果有人

drop_down "Dropdown" do
    menu_item "Home", "/"
    drop_down "Inner" do
        menu_item "Inner Home", "/inner"
    end
end

我想将其他drop_down块中的drop_down调用更改为调用sub_drop_down或至少做一些特殊事情,以使其知道它在另一个drop_down内{1}}阻止。这意味着用drop_down替换块中的字符串sub_drop_down

上面的代码示例将生成

<li class="dropdown">
  <a href="#" class="dropdown-toggle" data-toggle="dropdown">
    Dropdown
    <b class="caret"></b>
  </a>
  <ul class="dropdown-menu">
    <li class="active">
      <a href="/">Home</a>
    </li>
    <li class="dropdown">
      <a href="#" class="dropdown-toggle" data-toggle="dropdown">
        Inner
        <b class="caret"></b>
      </a>
      <ul class="dropdown-menu">
        <li>
          <a href="/inner">Inner Home</a>
        </li>
      </ul>
    </li>
  </ul>
</li>

但我希望第二个<li class="dropdown">成为<li class="dropdown-submenu">我可以通过将另一个drop_down调用更改为sub_drop_down来提供class,这可能会导致li 1}} "dropdown-submenu"成为sub_drop_down。我有什么想法可以改变这个电话吗?

我当前的def sub_drop_down(name) content_tag :li, :class => "dropdown-submenu" do drop_down_link(name) + drop_down_list {yield} end end 方法是

drop_down "Dropdown" do
    menu_item "Home", "/"
    sub_drop_down "Inner" do
        menu_item "Inner Home", "/inner"
    end
end

一旦我添加了sub_drop_down方法

,以下代码就会有所作为
sub_drop_down

但我不想强迫用户输入drop_down而不是sub_drop_down。我希望调用drop_down而不是drop_down

我正在尝试在this project中添加新功能。 content_tag方法的源代码是on lines 28-32 here,但我不确定如何将:class dropdown-submenu变量添加到dropdown而不仅仅是{{1} }}。这个问题是我关于如何做到这一点的第一个想法,如果不可能,我会喜欢使用不同方法的解决方案。

0 个答案:

没有答案