1

I'm making my first Rails app (actually it's my first programming experience) and I have a few questions about models and associations.

My first app is blog.
Blog have users. Users have posts.
One post have one category.
Post also can have tags.
One tag have one category (just like the post).
For example:
Category "Work" have tags "sql", "analytics", "excel" etc.
Category "Personal" have tags "travel", "photo", "surfing" etc.

http://img18.imageshack.us/img18/2213/3m1.png
Here's the sketch of database structure with associations.

And here's the list of my questions:

  1. How can I optimize this structure of models? Or it's ok? (I have a strange feeling about Category model)

  2. Is these associations for models written correct?

  3. Do I need to use :foreign_key and :dependent with associations?

  4. What's gonna happen with associated posts when I'll destroy Category (if :dependent not declared)?

  5. Do I need to have foreign keys on database side?

Thanks for the answers!

4

1 回答 1

2

(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 社区一直反对外键约束(不确定是否仍然如此),他们认为应该在代码中强制执行数据完整性

就个人而言-我是数据库外键约束的忠实拥护者,您可能会发现在某些情况下使用它们时必须与导轨作斗争。那里有一些宝石可能有助于为您生成它们-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

于 2013-06-15T19:36:42.897 回答