2011-03-09 9 views
2

私はfollowowsのように表示/ car.html.hamlに誰かのコードを見て:初心者の質問、ここで「収穫」は何を意味しますか?

%body 
    =yield 

誰が私にここに「=利回り」の使用を説明できますか?

-実際の身体部分コードはどこにありますか?

それは意味し、

はそれを使用するか、我々はそれを使用する必要がありますどのような状況で - なぜん - 何

答えて

4

通常、これはレイアウトファイル(デフォルトではviews/layouts/application.html.haml)に表示されます。現在のアクションのコンテンツをレンダリングするようにRailsに指示します。その場所はです。だから、

あなたとビュー/レイアウト/ application.html.hamlを持っている場合:

%body 
    =yield 

そして、あなたが持つビュー/記事/ index.html.hamlがあります。そして、

%h1 This is the posts index page! :D 

ときに投稿のインデックスページ(おそらく/ posts)をレンダリングするアクションに行くと、レイアウトファイルのyieldの位置にレンダリングされた見出しを持つhtmlが表示されます:

<body> 
    <h1>This is the posts index page! :D</h1> 
</body> 

これは、一般的なページナビゲーションマークアップやすべてのページに表示されるヘッダーなど、すべてのビューで正確なhtmlを再定義する必要がない場合に特に便利です。

あなたのサイトの別のセクションごとに異なるレイアウトを持っている場合は、このようなコントローラであなたのビューをレンダリングする可能性がありますどこレイアウトの指定されたレイアウト内でレンダリングされた指定されたビューを使用します

def index 
    if signed_in? 
    render :layout => 'application' 
    else 
    render 'user/unauthorized', :layout => 'external' and return 
    end 
end 

yieldが発生します。ステートメントuser/unauthorized.html.hamlのelseでは、layouts/external.html.hamlレイアウト内でレンダリングされ、signed_in?あなたはlayouts/application.html.hamlレイアウト内にレンダリングされたposts/index.html.hamlビューを取得します。

+0

_default_により、 'application.html.erb' :) –

1

http://api.rubyonrails.org/classes/ActionView/Partials.html

上記の記事は、ドキュメントがERBであり、あなたがHAMLを扱っているので、構文は同じではありません、それは何を意味するのかを説明します。実際のボディーコードは、おそらく_body.html.haml部分にあります。

0

この定義済みの関数は、実際には関数を通常定義し、returnの代わりにyield文を使用して、この関数をイテレータとして扱うべきであることをインタプリタに示します。

yieldステートメントは関数を一時停止し、ローカル状態を保存して、中断した箇所からすぐに再開できるようにします。私たちは、この関数を呼び出します場合は、それが私たちの機能は、実際にジェネレータオブジェクトを返した

val = countdown(5) 
>>> val 
<generator object countdown at 0x10213aee8> 

出力を与える

。したがって、ジェネレータ関数は以下のように異なる方法で呼び出されます。

ジェネレータオブジェクトは、next()が呼び出されたときに実行されます。

>>> next(val) 
Starting 
5 
関連する問題