2012-05-09 14 views
0

Railsのrespond_toブロックパラメータはxml、html、jsonメンバーを取得しますか?</p> <blockquote> <p>レールが足場のユーザー名を生成します:文字列メール:文字列</p> </blockquote> <p>は、コントローラクラスで次のようになり、コードのビットを作成します。このような足場を生成

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

最初は私はこれが何を意味するのか分からなかったので、私は見て行ったところ、ほとんどのことを十分に説明していると思われるthis、 を見つけました。しかし、フォーマットはResponder classになるはずです。さて、レスポンダクラスで宣言されたxmlやhtmlやjsonのメンバーは存在しないようです。彼らはどこから来たのか?

PS:

それはレスポンダされて終わる(およびフォーマット情報が.htmlを、.xmlファイル、.jsonから来るとき、足場の開発者は、「形式」をブロックパラメータに名前を付けるだろうと残酷なようですかコードは英語のように聞こえるが、実際に何が起こっているのかを理解するのは難しい。実際には、レスポンダ::応答があまりにも偶然思われるので、同じように定義されています。

def respond 
    method = "to_#{format}" 
    respond_to?(method) ? send(method) : to_format 
end 

しかし、私はフォーマットがここ(「_#{形式}に」の)ブロックに関連させることができる方法を見ていませんパラメータ名format。また、@記号が足りないのでインスタンス変数ではありません。

答えて

0

ブログが後で説明するように、は基本的にここからレスポンダインスタンスは、あなたのレールアプリが処理できるMIMEタイプに応じて、method_missing経由で.htmlと.xmlを処理します。 method_missingを表す素晴らしいブログの1つはhereです。
jsメソッドとjsonメソッドが呼び出されると、レスポンダのmethod_missingが呼び出されます。レスポンダクラスのmethod_missingは、その最初のパラメータとして "missing method_name"(つまり、:jsまたは:jsonシンボル)を取得し、レンダリングロジックを駆動します。

関連する問題

 関連する問題