0

次のような足場を生成します。

rails generate scaffold ユーザー名:文字列 電子メール:文字列

コントローラー クラスで次のようなコードを作成します。

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

最初はこれが何を意味するのかわからなかったので、探しに行ってこれを見つけまし。これは、ほとんどのことを適切に説明していると思います。しかし、形式は最終的にResponder クラスになるはずです。さて、Responder クラスで宣言されている xml、html、または json メンバーはないようです。彼らはどこから来たのか?

PS:

scaffold の開発者が、最終的にレスポンダーになったときにブロック パラメーターに「format」という名前を付けて (そして、フォーマット情報は .html、.xml、.json などから取得されます)、コードを少し似たものにするのは残酷に思えます。英語ですが、実際に何が起こっているのか理解できません。実際、Responder::respond は次のように定義されていますが、これはあまりにも偶然のようです。

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

しかし、ここ ("to_#{format}" 内) の形式が、format という名前のブロック パラメーターにどのように関連付けられるのかわかりません。明確にするために、@ 記号がないため、これはインスタンス変数ではありませんよね?

4

1 に答える 1

0

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

于 2012-05-09T04:21:50.060 に答える