web-dev-qa-db-ja.com

Rails 3では、response_toとformat.allはRails 2?

コード

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私がこれで見つけることができるドキュメントは

http://api.rubyonrails.org/classes/ActionController/MimeResponds/ClassMethods.html#method-i-respond_to

現在どの状態のみ:

respond_to :html, :xml, :json

ただし、jsonとxmlには別個のテンプレートが必要であり、「現時点ではHTML形式とJSON形式のみがサポートされている」場合には対応できません。

24
nonopolarity

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

お役に立てれば。

43
nathanvda

Rails 3でのコントローラーの変更、特にレスポンダークラスの変更(コントローラークラス自体にrespond_toを配置し、 action_with @object in the action):

http://railscasts.com/episodes/224-controllers-in-Rails-

3
svilenv

次は私のために働きます。 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
0
dreeves