30

我正在阅读 Rails 指南,发现以下代码行:

  class CreateComments < ActiveRecord::Migration
     def change
       create_table :comments do |t|
          t.string :commenter
          t.text :body
          t.references :post

          t.timestamps
       end

       add_index :comments, :post_id
     end
 end

我还阅读了 Michael Hartl 的书 Rails Tutorial,但我没有找到关于上面代码中使用的“t.references”的任何信息。它有什么作用?在Michael 的书中,我在模型中使用了has_many 和belongs_to 关系,而在迁移中没有使用(不是事件t.belongs_to)。

4

2 回答 2

32

这是 Rails 的一个相当新的补充,因此您提到的书中可能没有涵盖它。您可以在Rails Guides的迁移部分了解它。

当您使用生成时,比如说,

rails generate model Thing name post:references

...迁移将为您创建外键字段,并创建索引。就是t.references这样。

你可以写

rails generate model Thing name post_id:integer:index

并得到相同的最终结果。

于 2013-04-30T22:09:41.957 回答
8

请参阅Rails 指南的这一部分

在您的情况下,在您的表中t.references创建一post_idcomments。这意味着 Comment 属于 Post,因此在Comment模型中您必须添加belongs_to :post并在 Post 模型中:has_many :comments

于 2013-04-30T22:17:47.557 回答