2010-07-21 8 views
4

Comment les rails peuvent-ils se passer de ce qui suit dans un fichier .erb? Comment peuvent-ils céder plusieurs fois dans le même contexte à différents symboles? Est-ce une sorte de rails magique?Comment Rails cède-t-il à plusieurs blocs dans les modèles erb?

Je suis tout à fait familier avec:

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

A ma connaissance ci-dessous ne fonctionne pas:

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

Alors, comment font-ils? Comment font-ils fonctionner?

Répondre

17

Ils passent un symbole dans le rendement ...

yield :symbol 

... ne pas céder à un autre bloc.

Il fonctionne plus comme ceci:

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

Merci. Cela est parfaitement logique! – haroldcampbell