我正在使用rails中的API来响应xml和json。除了1个动作之外的所有动作xml和json都按预期响应。在total_words操作上,它使用json而不是xml正确响应。
pages_controller.rb
class Api::PagesController < ApplicationController
respond_to :json, :xml
def index
@pages = Page.all
respond_with @pages
end
def show
@page = Page.find(params[:id])
respond_with @page
end
def total_words
@page = Page.find(params[:id])
respond_with @page.words
end
end
page.rb
class Page < ActiveRecord::Base
attr_accessible :content, :published_on, :title
validates :title, :presence => true, :uniqueness => true
validates :content, :presence => true
def words
self.content.split.size
end
end
route.rb
API::Application.routes.draw do
match 'api/pages/:id/total_words' => 'api/pages#total_words', :as => "total_word_api_page"
namespace :api do
resources :pages
end
end
如果我使用以下方式通过curl访问:
curl --url http://0.0.0.0:3000/api/pages/3/total_words.xml
我一无所获。
如果我使用以下方式通过curl访问:
curl --url http://0.0.0.0:3000/api/pages/3/total_words.json
我得到:3
如果我使用以下方式通过浏览器访问:
http://0.0.0.0:3000/api/pages/3/total_words.xml
我明白了:
Template is missing
Missing template api/pages/total_words, application/total_words with {:locale=>[:en], :formats=>[:xml], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/api_test/API/app/views"
如果我在浏览器中做了相同但使用json我会得到:3就像我在curl中做的那样。
我不确定为什么json和xml会有不同的反应。
答案 0 :(得分:0)
问题似乎是我试图返回一个整数或字符串,它使用json而不是xml。我将返回值修改为哈希值,并且json使用json和xml成功返回了正确的值。看起来xml可以使用数组或哈希值。
我的修改方法现在是:
def words
{ id: self.id, word_count: self.content.split.size }
end