(1)。如何优化这种模型结构?或者没关系? (我对Category模型有一种奇怪的感觉)
对我来说一切都很好
(2)。这些模型关联是否正确?
他们似乎是
(3)。我需要使用 :foreign_key 和 :dependent 关联吗?
foreign_key:不,你不需要,但那是因为你遵循所有的 Rails 约定
这是一个示例,您可以使用 foreign_key 属性,而不是您想将其称为 post.author 的 post.user
class Post
belongs_to :author, class_name: "User", foreign_key: "user_id"
或者 - 如果帖子既有作者又有评论者
class Post
belongs_to :author, class_name: "User", foreign_key: "user_id"
belongs_to :reviewer, class_name: "User" # foreign key not needed if users.reviewer_id is the data base column name
依赖:可选,在某些情况下是个好主意
(4)。当我销毁 Category 时(如果 :dependent 未声明),相关帖子会发生什么?
has_many :posts, :dependent => :destroy 将在该类别被删除时删除该类别的所有帖子
如果您只保留has_many :posts,我相信销毁该类别将是其中之一
- 什么都没有,让您的帖子引用一个不存在的类别(这很糟糕)
- 将帖子上的 category_id 更新为 NULL(我认为在您的情况下,您不想要一个具有空类别的帖子?)
我不是删除数据的忠实拥护者 - 我是否建议在您的类别中添加 is_active 属性?
然后您可以根据该值有选择地显示类别或发布数据
(5)。我需要在数据库端有外键吗?
否 - 长期以来,rails 社区一直反对外键约束(不确定是否仍然如此)他们认为应该在代码中强制执行数据完整性
就个人而言 - 我是数据库外键约束的忠实拥护者,您可能会发现在某些情况下使用它们时必须与 Rails 作斗争
那里有一些宝石可能有助于为您生成它们 - https://www.google.com/search?q=rails+gem+foreign+keys
注意事项
另一个好资源:http://guides.rubyonrails.org/association_basics.html(用于数据模型)- 其他指南也非常好
看起来您在数据建模方面正朝着正确的方向前进 - 我可能会建议您在开始构建应用程序时,从最简单的事情开始 - 只需一个用户和一个帖子,然后像您一样在其他模型中分层去
也适用于您的用户 - 我建议您在启动应用程序时 - 使用设计 gem 及其生成器来创建您的用户模型(注意:它还将处理所有用户创建和身份验证需求 - 视图和控制器,这是一个很好的方法快速开始使用任何应用程序)
rails generate devise:install 然后rails generate devise User
https://github.com/plataformatec/devise