Respond_to(*types, &block) public Web サービスのサポートがない場合、人のリストを表示するためのデータを収集するアクションは次のようになります。
def index
@people = Person.find(:all)
end
これは同じアクションで、Web サービスのサポートが組み込まれています。
def index
@people = Person.find(:all)
respond_to do |format|
format.html
format.xml { render :xml => @people.to_xml }
end
end
つまり、「クライアントがこのアクションへの応答として HTML を必要とする場合は、以前と同じように応答しますが、クライアントが XML を必要とする場合は、人々のリストを XML 形式で返します」ということです。(Rails は、クライアントから送信された HTTP Accept ヘッダーから目的の応答形式を決定します。)
Web サービスを使用せずに、新しい人物を追加し、必要に応じて (名前で) 会社がまだ存在しない場合は作成するアクションがあると仮定すると、次のようになります。
def create
@company = Company.find_or_create_by_name(params[:company][:name])
@person = @company.people.create(params[:person])
redirect_to(person_list_url)
end
これは同じアクションで、Web サービスのサポートが組み込まれています。
def create
company = params[:person].delete(:company)
@company = Company.find_or_create_by_name(company[:name])
@person = @company.people.create(params[:person])
respond_to do |format|
format.html { redirect_to(person_list_url) }
format.js
format.xml { render :xml => @person.to_xml(:include => @company) }
end
end
クライアントが HTML を必要とする場合は、ユーザー リストにリダイレクトするだけです。Javascript (format.js) が必要な場合、それは RJS 要求であり、このアクションに関連付けられた RJS テンプレートをレンダリングします。最後に、クライアントが XML を必要とする場合、作成された人物を XML としてレンダリングしますが、ひねりを加えて、レンダリングされた XML に人物の会社も含めるため、次のようになります。
http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to