在辅助类中渲染布局

时间:2012-02-23 09:56:51

标签: ruby-on-rails

我正在呈现以下html片段......

<div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
        <div class="container">
            <%= yield %>    
        </div>
    </div>
</div>

...像这样:

<%= render :layout => "shared/menu" do %>
    ...code here...
<% end %>

现在为了更清理事物,我想隐藏渲染器中的渲染器,以便有类似的东西:

<%= bs_menu do %>
    ...code here...
<% end %>

我试过以下帮手没有成功:

def bs_menu(&block)
    render(:layout => "shared/menu") &block
end

我从rails(3.2.1)中得到此错误:

  

你调用了渲染但没有给出任何:partial,:template,   :inline,:file或:text选项。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为你也可以这样做:

def bs_menu(&block)
  render({:layout => "shared/menu"}, &block)
end

(也许你也可以省略花括号)。这是我将块传递给方法的标准方法。

答案 1 :(得分:0)

好的,我发现了如何编写助手。我没有正确地调用块:

def bs_menu(&block)
    render(:layout => "shared/menu") do
        block.call
    end
end

我认为这是编写干净视图的一种非常简洁的方法。另一个选项是this