在 Rails 3 中生成 RSS feed

2024-01-10

我正在寻找在 Rails 3 中生成提要的最佳实践/标准模式。是http://railscasts.com/episodes/87-generate-rss-feeds http://railscasts.com/episodes/87-generating-rss-feeds仍然有效?


首先,现在我建议使用 ATOM feed 而不是 RSS.

ATOM feed 的规范在国际化、内容类型等方面比 RSS 提供更多价值and每个现代提要阅读器都支持它。

有关 ATOM 与 RSS 的更多信息可以在以下位置找到:

  • the 维基百科 ATOM 条目 http://en.wikipedia.org/wiki/Atom_(standard)#Atom_compared_to_RSS_2.0
  • 专业博主 http://www.problogger.net/archives/2006/03/30/rss-vs-atom-whats-the-big-deal/ and 自由营销区 http://www.freemarketingzone.com/rss/atom-vs-rss.html关于该主题的博客文章

继续编码:

此示例假设:

  • 一个名为NewsItem具有以下属性:
  • title
  • content
  • author_name
  • 该模型的控制器(news_items_controller.rb),您将在其中添加feed action

我们将为此使用构建器模板和 Ruby on Railsatom_feed 助手 http://api.rubyonrails.org/classes/ActionView/Helpers/AtomFeedHelper.html这是很有用的。

1. 将动作添加到控制器中

Go to app/controllers/news_items_controller.rb并添加:

def feed
  # this will be the name of the feed displayed on the feed reader
  @title = "FEED title"

  # the news items
  @news_items = NewsItem.order("updated_at desc")

  # this will be our Feed's update timestamp
  @updated = @news_items.first.updated_at unless @news_items.empty?

  respond_to do |format|
    format.atom { render :layout => false }

    # we want the RSS feed to redirect permanently to the ATOM feed
    format.rss { redirect_to feed_path(:format => :atom), :status => :moved_permanently }
  end
end

2. 设置您的构建器模板

现在让我们添加模板来构建提要。

Go to app/views/news_items/feed.atom.builder并添加:

atom_feed :language => 'en-US' do |feed|
  feed.title @title
  feed.updated @updated

  @news_items.each do |item|
    next if item.updated_at.blank?

    feed.entry( item ) do |entry|
      entry.url news_item_url(item)
      entry.title item.title
      entry.content item.content, :type => 'html'

      # the strftime is needed to work with Google Reader.
      entry.updated(item.updated_at.strftime("%Y-%m-%dT%H:%M:%SZ"))

      entry.author do |author|
        author.name entry.author_name
      end
    end
  end
end

3. 将其与路线连接起来

让我们在以下位置提供提要:http://domain.example/feed

这将默认调用 ATOM 格式的操作并重定向/feed.rss to /feed.atom.

Go to config/routes.rb并添加:

resources :news_items
match '/feed' => 'news_items#feed',
      :as => :feed,
      :defaults => { :format => 'atom' }

4. 在布局上添加 ATOM 和 RSS feed 的链接

最后,剩下的就是将提要添加到布局中。

Go to app/views/layouts/application.html.erb并将其添加到您的<head></head>部分:

<%= auto_discovery_link_tag :atom, "/feed" %>
<%= auto_discovery_link_tag :rss, "/feed.rss" %>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Rails 3 中生成 RSS feed 的相关文章

随机推荐

  • Android 无法绑定到服务(在应用程序计费中)

    我正在尝试在我的应用程序中实现应用程序计费 但我遇到了一些问题 我正在使用 Android 开发人员网站上的示例 每次我启动将连接到计费服务的活动时 它都会向我显示一个无法连接到服务器的对话框 当我按 了解更多 时 它会转到一个正在解释我的
  • 将右侧“完成”按钮 (UIBarButtonItem) 添加到 UINavigationController

    我看到这里有人问了类似的问题 如何向 UINavigationController 添加右键 https stackoverflow com questions 1219779 how to add a right button to a
  • VS Code 找不到 python 3 解释器

    我是第一次安装 Python 3 7 2 并且使用 VS Code python 扩展 当我跑步时python V I get Python 2 7 10这是不正确的 当我选择usr local bin python3VS Code 中的解
  • 一个应用程序中有两个 google-services.json (具有不同的帐户)

    是否可以在 Android 应用程序中使用两个不同的帐户来访问谷歌的两种不同服务 我想通过帐户使用 Google Analytics 分析 电子邮件受保护 cdn cgi l email protection和 Firebase 帐户崩溃报
  • “git checkout <文件名>”和“git checkout -​- <文件名>”之间的区别

    http norbauer com notebooks code notes git revert reset a single file http norbauer com notebooks code notes git revert
  • 主要编译器/工具链对 C99 的支持状况如何?

    对我在这里发表的评论的回应让我停下来思考 我真的不知道 C99 支持的状况如何 维基百科提供了一些编译器的详细信息 但我对 C99 不够熟悉 无法了解该标准的所有细节 因此我正在寻找该问题的格式塔概述答案 主要编译器 工具链对 C99 的支
  • ggplot2 的小提琴图与 x 轴上的数据集的顺序不同

    I created the using below code But on the x axis Models name are not in order as in the data set i e Observed SVM Grid S
  • 如何用CMake安装依赖库?

    我想安装所有依赖库 为了做到我所做的 install FILES path external dll DESTINATION lib 但是 我已经配置了路径 和库 target link libraries target link libr
  • 我正在尝试应用多标签分类

    我正在尝试应用多标签分类 形状是 x train shape 3975 3788 y train shape 3975 66 x test shape 994 3788 y test shape 994 66 当我尝试训练时 出现以下错误
  • 迭代 Pandas 中的行和列

    我正在尝试填充列中所有 NaN 值的平均值 import numpy as np import pandas as pd table pd DataFrame A 1 2 np nan B 3 np nan np nan C 4 5 6 d
  • 对 Promise 中 thenable 回调的工作方式感到困惑吗?

    我是 JS 的新手 正在学习 Promise 我想展示的代码摘录是这样的 promisedFunction then data gt console log data 或者简单地 promisedFunction then console
  • 使用严格会导致未定义的函数

    我正在尝试组织我的 js 文件并遵循建议的模块模式 当我在此模式中使用 use strict 时 函数被声明为未定义 如果没有 use strict 方法 该函数就可以正常工作 是否建议使用严格模式 如果是 为什么该功能在使用它时不起作用
  • 如何在android平台的unity3d中使用c#线程?

    我需要加载文件 场景并在线程中播放动画 尝试在 Android 中通过 www 加载文件 如何通过线程做其他事情 但是为什么游戏引擎不允许我们创建线程呢 或者我的理解是错误的 如何在 UNITY3D 中创建线程 您可以在 Unity 中使用
  • 取消设置会话 PHP 不能正常工作

    我想在单击注销按钮时取消设置用户名和购物车 如果我想放置 如果单击注销 那么会话将取消设置 我应该怎么做 我的代码有效 然而 当我再次点击登录时 登录信息不存储在会话中 它不断要求我再次登录 而不是进行通常的流程 我可以知道出了什么问题吗
  • 使用 System.IO.Packaging 在 C# 中创建 zip

    我正在尝试在服务器上动态创建 zip 文件 其中包含来自在线服务的照片 但是当我尝试打开该文件时 WinRar 说该文件格式未知或已损坏 这是代码 MemoryStream stream new MemoryStream Package p
  • 将值替换为在 unix shell 中对值调用函数的结果

    我有一个如下所示的文本流 s123456789 9780 heartbeat test 1344280205000000 0 heartbeat test 1344272490000000 0 这些长数字是以微秒为单位的时间戳 我想通过某种
  • 如何在ctypes python中传递char指针作为参数

    请帮助我将以下 c 代码行转换为 ctypes python Ret openFcn Handle C Config xml 以下是各自的声明 typedef uint16 t OpenDLLFcnP void const char Ope
  • 如何从 ASPX 控件事件调用 Javascript 函数?

    如何从 ASPX 控件事件调用 Javascript 函数 具体来说 我想从 DropDownList 的 SelectedIndexChanged 事件中调用该函数 每当我看到这种问题时 我都会有点紧张 因为十有八九这意味着提问者并不真正
  • 前景窗口与活动窗口

    在Windows中 前台窗口和活动窗口有什么区别 具体来说 什么情况下前台窗口不能是活动窗口 如果这两个术语指的是同一概念 那么为什么有两个术语 The msdn documentation here mentions clicking a
  • 在 Rails 3 中生成 RSS feed

    我正在寻找在 Rails 3 中生成提要的最佳实践 标准模式 是http railscasts com episodes 87 generate rss feeds http railscasts com episodes 87 gener