XML不会为rails中的1个操作呈现值

时间:2013-05-31 21:50:44

标签: ruby-on-rails xml curl

我正在使用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会有不同的反应。

1 个答案:

答案 0 :(得分:0)

问题似乎是我试图返回一个整数或字符串,它使用json而不是xml。我将返回值修改为哈希值,并且json使用json和xml成功返回了正确的值。看起来xml可以使用数组或哈希值。

我的修改方法现在是:

  def words
    { id: self.id, word_count: self.content.split.size }
  end