Rails:模型的关联,使用:dependent和:foreign keys

时间:2013-06-14 21:15:08

标签: ruby-on-rails foreign-keys dependencies model-associations

我正在制作我的第一个Rails应用程序(实际上这是我的第一次编程体验),我有一些关于模型和关联的问题。

我的第一个应用是博客 博客有用户。用户有帖子。
一个帖子有一个类别 邮政也可以有标签 一个标签有一个类别(就像帖子一样) 例如:
类别“工作”有标签“sql”,“analytics”,“excel”等 类别“个人”有标签“旅行”,“照片”,“冲浪”等。

http://img18.imageshack.us/img18/2213/3m1.png
这是带关联的数据库结构草图。

以下是我的问题清单:

  1. 如何优化此模型结构?或者没关系? (我对分类模型有一种奇怪的感觉)

  2. 模型的这些关联是否正确?

  3. 我是否需要使用:foreign_key和:依赖关联?

  4. 当我销毁类别(如果:依赖未声明)时,关联帖子会发生什么?

  5. 我是否需要在数据库端拥有外键?

  6. 感谢您的回答!

1 个答案:

答案 0 :(得分:2)

  

(1)。我该如何优化这种模型结构?或者没关系? (我对分类模型有一种奇怪的感觉)

这对我来说都很好看

  

(2)。模型的这些关联是否正确?

他们似乎是

  

(3)。我是否需要使用:foreign_key和:依赖关联?

foreign_key:不,你不需要,但那是因为你遵循所有的轨道约定

这里有一个例子,你可以使用foreign_key属性,而不是post.user,你想把它称为post.author

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)。当我破坏类别(如果:依赖未声明)时,相关帖子会发生什么?

当该类别被删除时,

has_many :posts, :dependent => :destroy会删除该类别的所有帖子

如果您保留has_many :posts我认为销毁该类别会执行

之一
  • 没有,让你的帖子引用一个不存在的类别(这很糟糕)
  • 将帖子上的category_id更新为NULL(我认为在你的情况下你不想要一个空类别的帖子?)

我不是删除数据的狂热粉丝 - 我是否可以建议在您的类别中添加is_active属性? 然后,您可以根据该值选择性地显示类别或发布数据

  

(5)。我是否需要在数据库端使用外键?

否 - 长期以来,rails社区一直反对外键约束(不确定是否仍然如此)他们认为数据完整性应该在代码中强制执行

就个人而言 - 我是数据库外键约束的忠实粉丝,你可能会发现在某些情况下你必须使用它们来对抗它们 有一些宝石可能有助于为您生成它们 - https://www.google.com/search?q=rails+gem+foreign+keys

  

注释

另一个好的资源:http://guides.rubyonrails.org/association_basics.html(对于数据模型) - 其他指南也非常好

看起来你正朝着正确的方向进行数据建模 - 我可能会建议你开始构建应用程序,从最简单的事情开始 - 只需一个用户和一个帖子,然后在其他模型中分层去

同样适合您的用户 - 我建议您启动应用程序时 - 使用设计宝石及其生成器来创建您的用户模型(注意:它还将处理所有用户创建和身份验证需求 - 视图和控制器,这是一个很好的方法在任何应用程序上获得快速启动)

rails generate devise:install然后rails generate devise User

https://github.com/plataformatec/devise