2010-07-21 62 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