Ruby on Rails - 模型和关系表

时间:2011-07-15 04:57:19

标签: ruby-on-rails ruby ruby-on-rails-3

我是一个noob,开始使用ruby on rails并试图了解模型。非常熟悉数据库并希望了解何时为关系生成模型?

例如 - 我有用户表和小工具表。每个用户都可以拥有多个小工具。我想将此关系存储在与user_id和gadget_id的关系表中。我使用rails生成模型User和rails生成模型Gadget cmd。

创建了两个表

问题 - 我现在要创建另一个名为users_gadgets的模型吗?命名约定是否正确?我已经看到很多关于如何创建关联的文档(has_many,belongs_to)但是我不知道何时需要创建模型?

每次我想在数据库中存储关系然后运行迁移时,是否必须创建模型?

4 个答案:

答案 0 :(得分:5)

关系模型只对您描述的N对N关系有意义。当您选择使用has_and_belongs_to_many时,您不需要创建连接模型,但仍需要通过迁移创建连接表。然后命名约定是gadgets_users,因为'g'在字母表中的'u'之前。

如果您选择has_many:through,则可以通过GadgetUser连接模型在连接表中存储其他信息。例如,如果您想在给定时间内记录小工具属于用户,那么此时间信息在逻辑上属于小工具和用户之间的“连接”,因此您应将其保留在连接表中。

答案 1 :(得分:4)

你可以用两种方式之一

1) has_and_belongs_to_many 在这种情况下,你只需要一个表(没有模型)gadgets_users和user_id gadget_id,rails喜欢表名是alpha编号的复数

2) has_many:通过,这不是'普通'有很多,在这种情况下你需要一个模型(可以任意你喜欢的名字) 我更喜欢这个,因为它允许你在需要时为关系添加额外的属性

参见指南,它比我http://guides.rubyonrails.org/association_basics.html#choosing-between-has_many-through-and-has_and_belongs_to_many

更好地解释了

也 - railscasts - http://railscasts.com/episodes/47-two-many-to-many

每次我想在数据库中存储关系然后运行我的迁移时,是否必须创建模型?是,大部分时间

答案 2 :(得分:1)

我发现考虑这个问题最有用的方法是考虑与应用程序逻辑相关的模型以及与数据相关的表。例如,假设您的用户有姓名,身高和体重。这些是用户的属性,并存储在表中。可以通过模型的属性访问它们。但是,用户也可能根据身高和体重计算身体质量指数。这是模型的一种方法,但只与数据库间接相关。

就个人而言,我总是会为数据库表创建一个模型。这样做更容易,无需编写大量SQL语句就可以更轻松地编写干净的ruby代码,如果将来某些时候想要为模型添加逻辑,那么很容易做到。

答案 3 :(得分:0)

安装 宝石安装外国人

将以下行添加到gem文件

宝石'外国人'

之后的评论链接

https://github.com/matthuhiggins/foreigner