Rails 3 Atom Feed

时间:2012-03-27 23:32:30

标签: ruby-on-rails rss atom-feed

尝试在Rails中创建Atom提要3.当我刷新浏览器时,我看到基本的XML,而不是我正在寻找的Atom提要。

class PostsController < ApplicationController
  # GET /posts
  # GET /posts.xml
  def index
    @posts = Post.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml { render :xml => @posts }
      format.atom
    end
  end

index.atom.builder

atom_feed do |feed|
  feed.title "twoconsortium feed"
  @posts.each do |post|
    feed.entry(post) do |entry|
      entry.title post.title
      entry.content post.text
    end
  end
end

localhost:3000 / posts.atom看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <id>tag:localhost,2005:/posts</id>
  <link rel="alternate" type="text/html" href="http://localhost:3000"/>
  <link rel="self" type="application/atom+xml" href="http://localhost:3000/posts.atom"/>
  <title>my feed</title>
  <entry>
    <id>tag:localhost,2005:Post/1</id>
    <published>2012-03-27T18:26:13Z</published>
    <updated>2012-03-27T18:26:13Z</updated>
    <link rel="alternate" type="text/html" href="http://localhost:3000/posts/1"/>
    <title>First post</title>
    <content>good stuff</content>
  </entry>
  <entry>
    <id>tag:localhost,2005:Post/2</id>
    <published>2012-03-27T19:51:18Z</published>
    <updated>2012-03-27T19:51:18Z</updated>
    <link rel="alternate" type="text/html" href="http://localhost:3000/posts/2"/>
    <title>Second post</title>
    <content>its that second post type stuff</content>
  </entry>
</feed>

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。

  1. 首先确保.builder文件生成的XML是有效的 Atom XML。您可以将其粘贴到W3c feed validator,它会告诉您它是否有问题。我粘贴了上面的XML,似乎有一些问题。编辑.builder文件并生成结果XML后。使用有效的原子Feed刷新页面。

  2. 如果您仍然看到普通的XML,请检查浏览器的调试器,以查看您为Feed获取的响应标头。具体来说,您是否获得内容类型标题?浏览器需要它是一些xmlish mime类型,如'application / xml'或更好的'application / atom + xml'。如果您没有获得Content-Type,或者由于某种原因得错了,您可以直接在控制器的格式调用中覆盖headers哈希中的响应头。只需添加一个代码块,其中包含典型的Atom mime类型字符串:

  3. respond_to do |format|
      format.html # index.html.erb
      format.xml { render :xml => @posts }
      format.atom { headers["Content-Type"] = 'application/atom+xml; charset=utf-8'}
    end
    

答案 1 :(得分:0)

This可能有助于在XHTML中格式化Feed。