开发一个 Rss 阅读器 02 - 建立模型和基本的页面
本来都快鸽了,不过还是决定继续,毕竟我的确需要一个 RSS 阅读器。从这篇文章开始,正式进入开发迭代的阶段。我的计划是先做简陋的版本,先用起来,然后再慢慢改进。
建立应用
我选择使用 replit.com 来免费托管应用,为了一个自用的 rss 阅读器,自己去购买 vps 建立服务什么的,太不划算了。非常幸运的是 replit 直接支持建立 Rails 类型的应用。
如果你也想深度,可以自己在 repl 上面建立,或者 fork 我的项目。
建立模型
初期,我需要的三个实体如下
分类
- 名称
订阅
- 名称
- 订阅地址
- 归属的分类
文章
- 标题
- 链接
- 发布时间
- 阅读时间
- 内容
- 归属的订阅
首先,利用 rails 的 generator,生成一下基础的框架,包括 controller, model, form, json 什么的。
rails g scaffold Category name
rails g scaffold Channel title description link xml_link fetched_at:datetime category:belongs_to
rails g scaffold Item title description content link published_at:datetime read_at:datetime channel:belongs_to
最后再招待一下 db:migrate
rails db:migrate
这些 model 会自动生成一些关联关系,然后再手动补充一些必要的关系
class Category < ApplicationRecord
has_many :channels # ←---
end
class Channel < ApplicationRecord
belongs_to :category
has_many :items # ←---
end
简单的页面导航
将内容列表页面设置为网站首页,然后给所有页面添加一下基本的导航,方便在不同页面之间跳转
config/routes.rb
Rails.application.routes.draw do
# ...
root "items#index"
end
app/views/layouts/application.html.erb
<body>
<nav>
<%= link_to "Items", items_path %>
<%= link_to "Categories", categories_path %>
<%= link_to "Channels", channels_path %>
</nav>
...
<body>
这样网站打开后就是下面这个样子(没有数据)
支持建立订阅
分类只有一个字段,暂时不需要什么修改,直接先建几个分类测试一下 。
接下来访问 rss-reader.greatghoul.repl.co/channels/new 可以看到非常粗糙的表单页面
这里面有两个表单字段需要处理,一个是最后拉取时间,我不需要手工维护这个字段,直接删除,另一个是归属的分类,简单需要做成下拉框。
app/views/channels/_form.html.erb
<div>
<%= form.label :category_id, style: "display: block" %>
<%= form.collection_select :category_id, Category.all, :id, :name %>
</div>
这里先不考虑自动根据 rss 链接获取订阅的标题等信息的问题。
下一步
下一步,我打算实现拉取订阅中文章的功能(文章列表是现成的,只需要小修改一下即可),然后再已读未读的功能,这样就可以简单的投入使用了。