gpt4 book ai didi

ruby-on-rails - 博客架构设计

转载 作者:行者123 更新时间:2023-12-04 03:48:46 25 4
gpt4 key购买 nike

我正在自学 Rails,想建立一个类似于 tumblr 的博客。它将有几种不同的帖子类型,例如书面文字、照片帖子、音频帖子和视频帖子。

我最初的想法是为每种类型的帖子设置不同的模型,因为每种类型的帖子都有不同的规则。但是,我仍在学习并且不知道我不知道什么,所以也许有更好的方法来处理事情(也许只有一个帖子模型和一个帖子类型表?)。

如有任何反馈,我们将不胜感激。

最佳答案

可能一个好的关系数据库和面向对象的设计应该有一个主要的帖子模型,它可能与所有类型的帖子共享大部分相同的属性和行为。这甚至可以作为您的“文本”类型的帖子。

这也可以简化与帖子的关系(例如,“用户有很多帖子”与“用户有很多文本帖子和/或视频帖子和/或等等”)。

然后有一种“附件”连接表,它确定附件的类型(因此每个帖子可以有多个附件):

CREATE TABLE attachments (post_id, media_type, media_id)

然后为每种媒体类型的特定行为和处理程序创建一个表和模型。

CREATE TABLE audios (id, transcription, storage);
CREATE TABLE videos (id, location, format, storage);

不过,这可能需要某种多态关系,这可能是一个有争议的数据库设计……您需要 View 和触发器来轻松查询并保持完整性……但 Rails 处理得很好。

post 模型会有

has_many :attachments

附件会有

belongs_to :post
belongs_to :media, :polymorphic => true

每个媒体模型都会有

has_one :attachment, :as => :media

然后您可以通过

访问您的媒体
post.attachments[0].media

如果每个帖子只需要一种类型的媒体,则可以跳过附件表并将属性与帖子表合并

对不起,我一直在编辑,我一直在想更多要说的:)

关于ruby-on-rails - 博客架构设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com