在Ruby on Rails项目中为博客添加RSS订阅功能,可以让读者通过RSS阅读器及时获取最新文章更新,提升内容传播效率。下面我们一步步实现这个功能。

准备工作
首先确保你的Rails项目已经有一个可用的博客文章模型,假设我们的文章模型名为Post,包含title、content、created_at、updated_at等基础字段,且文章发布后状态为可公开访问。
配置路由
我们需要在路由文件中添加RSS订阅的访问路径,打开config/routes.rb文件,添加如下配置:
Rails.application.routes.draw do
# 其他已有路由配置
resources :posts, only: [] do
collection do
get :feed, defaults: { format: :xml }
end
end
end这样访问/posts/feed.xml就可以获取RSS订阅源了。
编写控制器逻辑
接下来在PostsController中添加feed方法,用于查询需要展示在RSS中的文章数据:
class PostsController < ApplicationController
def feed
# 查询最近20篇已发布的文章,按发布时间倒序排列
@posts = Post.where(published: true).order(created_at: :desc).limit(20)
# 设置响应格式为XML
respond_to do |format|
format.xml
end
end
end创建RSS视图模板
在app/views/posts目录下创建feed.xml.builder文件,按照RSS 2.0规范生成订阅内容:
xml.instruct! :xml, version: "1.0"
xml.rss(version: "2.0") do
xml.channel do
xml.title "我的Rails博客RSS订阅"
xml.description "分享Ruby on Rails开发、技术实践相关的博客文章"
xml.link "https://www.ipipp.com" # 替换为你的博客域名
xml.language "zh-CN"
xml.lastBuildDate @posts.first&.updated_at&.rfc822
@posts.each do |post|
xml.item do
xml.title post.title
xml.description post.content.truncate(200) # 截取部分内容作为描述
xml.link post_url(post, host: "https://www.ipipp.com") # 替换为你的博客域名
xml.pubDate post.created_at.rfc822
xml.guid post_url(post, host: "https://www.ipipp.com")
end
end
end
end验证与优化
启动Rails服务后,访问http://127.0.0.1:3000/posts/feed.xml,可以看到生成的XML格式RSS内容。你可以把链接复制到主流RSS阅读器中测试是否能正常识别。
如果需要优化,可以补充文章的作者信息、分类标签,还可以添加缓存机制,避免每次请求都查询数据库,提升访问性能。另外要注意如果文章内容包含HTML标签,需要做适当的转义处理,避免RSS解析出错。
Ruby_on_RailsRSSfeedblog修改时间:2026-05-29 05:03:47