2012-02-02 8 views
0

ルビーとレールの新機能です。レールで生成されたrubyソースコード

rorドキュメントのガイドに従って、ブログアプリケーションを作成します。

Howver私はコードが生成見ると、私はexmpaleのために、私はそれを理解できないことが判明:

def show 
    @post = Post.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @post } 
    end 
    end 

repond_toが方法であるが(それはないですか?)、および以下のブロックであります引数?

ブロック内のコードは何を意味しますか?

 format.html # show.html.erb 
     format.json { render json: @post } 

format.htmlはメソッド名などですか?

どのように{ render json: @post }について>?

+0

いくつかの[docs](http://apidock.com/rails/ActionController/MimeResponds/respond_to)を読んでみましたか? –

+0

私はメソッドの機能を意味するのではなく、ここでの表現です。 – hguser

+0

いくつかの基本的なルビー教育が必要です。これは他の何よりも速くクリアされます。 http://mislav.uniqpath.com/poignant-guide/ – muffinista

答えて

1

respond_toメソッドは、要求された形式でコンテンツを配信するのに役立ちます。たとえば、/posts/1.jsonを呼び出すと、レスポンスはJSONファイルになります。 /posts/1.htmlの場合、応答はHTMLページになります。拡張子が与えられていないときのデフォルトは、HTMLをレンダリングすることです。

format.json方法は、すべてのJSONリクエストのためにあなたがカウンターを増加したいと思いますが、HTMLのリクエストに対して、あなたが行うことができない場合、例えば同じように、その拡張子を要求したときに何をすべきかのRailsを伝えます:

format.json { 
    counter = counter + 1 
    render json: @post 
} 

format.jsonメソッドにブロックを指定しないと、Railsは自動的にshow.json.erbファイルのviews/posts/を調べ、レンダリングします。提供した方法では、render json: @postはファイルを探す代わりにレンダリングするようにRailsに指示します。

+0

リクエストの種類(jsonまたはhtml)に応じて異なる結果が表示されることがわかりましたが、私はこの構文を理解できません。ここで 'format'はオブジェクトですか? 'format.json'はメソッドであり、' {xx} 'はブロック型の引数ですか?ブロックの内部では、 'render'が別のメソッド名で、' json:@ post'が引数ですか? – hguser

+0

さて、そこにいくつかのRails.log.infoを置いて、何が起こっているのかを見ることができます... –

+0

@hguser、あなたが何を求めているのか、何の方法についての仮定とその場合の議論は正しいですか? 'render json:@ post'は' render({:json => @post}) 'と同等です。 –