我正在阅读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)。
答案 0 :(得分:28)
这是Rails的最新成员,所以你提到的书可能没有涉及。您可以在the migration section的Rails指南中阅读相关内容。
当您使用生成时,例如
rails generate model Thing name post:references
...迁移将为您创建外键字段,以及创建索引。这就是t.references
的作用。
你可以写
rails generate model Thing name post_id:integer:index
得到了相同的最终结果。
答案 1 :(得分:6)
请参阅Rails指南的this section。
在您的情况下,t.references
会在post_id
表格中创建comments
列。这意味着评论属于发布,因此在Comment
模型中您必须添加belongs_to :post
并在帖子模型中添加:has_many :comments
。