コード
respond_to do |format|
format.html
format.json { render :json => @switches }
format.xml { render :xml => @switches.to_xml }
format.all { render :text => "only HTML, XML, and JSON format are supported at the moment." }
end
上記はRails 2.2.2で機能します。しかしRails 3では、ブラウザでコントローラ/index.htmlまたはインデックスを取得すると、どちらも最後の行:「現時点では、HTMLおよびJSON形式のみがサポートされています。」
Rails私がこれで見つけることができるドキュメントは
現在どの状態のみ:
respond_to :html, :xml, :json
ただし、jsonとxmlには別個のテンプレートが必要であり、「現時点ではHTML形式とJSON形式のみがサポートされている」場合には対応できません。
Rails3では、次のように記述します。
respond_with(@switches) do |format|
format.html
format.json { render :json => @switches }
format.xml { render :xml => @switches }
format.all { render :text => "only HTML, XML, and JSON format are supported at the moment." }
end
しかし、これはrespond_to
ブロックはファイルの上部にあり、予想されるフォーマットの詳細を示します。例えば。
respond_to :xml, :json, :html
その場合でも、たとえば誰かがjs
フォーマットを要求すると、any
ブロックがトリガーされます。
また、respond_to
だけで、次のようになります。
@switches = ...
respond_to do |format|
format.html {render :text => 'This is html'}
format.xml {render :xml => @switches}
format.json {render :json => @switches}
format.all {render :text => "Only HTML, JSON and XML are currently supported"}
end
お役に立てれば。
Rails 3でのコントローラーの変更、特にレスポンダークラスの変更(コントローラークラス自体にrespond_toを配置し、 action_with @object in the action):
次は私のために働きます。 htmlの "render"部分を明示的に指定する必要があると思います。そうしないと、format.anyが使用されます。
respond_to do |format|
format.html { render :html => @switches }
format.json { render :json => @switches }
format.xml { render :xml => @switches }
format.all { render :text => "we only have html, json, and xml" }
end