2010-07-21 30 views
4

rails如何在.erb文件中脱离以下内容?Rails如何屈服于erb模板中的多个块?

<%= yield :sidebar %> 
<%= yield :other_bar %> 
<%= yield :footer %> 

他们如何能够在同一上下文中产生多次不同的符号?这是否是一种铁轨魔术?

我完全熟悉:

def some_method(arg1, arg2, &block) 
yield(:block) 
end 

要跟着我的知识不工作:

def some_incorrect_method(arg1, &block1, &block2) 
yield(:block1) 
yield(:block2) 
end 

那么他们是如何做的呢?他们如何使它工作?

回答

17

他们传递一个符号到产生......

yield :symbol 

...不是产生于不同的块。

它的工作原理更像是这样的:

def some_method(arg1, arg2, &block) 
    yield(:some_symbol1) 
    yield(:some_symbol2) 
end 

some_method do |symbol| 
    case symbol 
    when :some_symbol1 
    # do A 
    when :some_symbol2 
    # do B 
    else 
    # unrecognised symbol? 
    end 
end 
+0

谢谢。这非常合理! – haroldcampbell 2010-07-23 04:30:46