我搞不懂如何生成一个belongs_to另一个模型的模型。我的书使用以下语法将Micropost与User关联:
rails generate model Micropost user_id:integer
但是https://guides.rubyonrails.org/active_record_migrations.html#creating-a-standalone-migration说要这样做:
rails generate model Micropost user:references
这两个生成的迁移是不同的。另外,对于前者,rails如何知道user_id
是引用user
的外键?谢谢!
发布于 2011-10-23 03:24:11
当您运行迁移时,两者都将生成相同的列。在rails控制台中,您可以看到以下情况:
:001 > Micropost
=> Micropost(id: integer, user_id: integer, created_at: datetime, updated_at: datetime)
第二个命令在你的Micropost模型中添加了一个belongs_to :user
关系,而第一个没有。当指定此关系时,ActiveRecord将假定外键保存在user_id
列中,并且它将使用名为User
的模型来实例化特定用户。
第二个命令还在新的user_id
列上添加一个索引。
发布于 2011-10-23 03:25:58
对于前者,约定优于配置。引用另一个表时,Rails默认使用
belongs_to :something
就是去找something_id
references
或belongs_to
实际上是较新的编写前者的方式,几乎没有什么怪癖。
重要的是要记住,它不会为您创建外键。为此,您需要使用以下任一方法显式设置它:
t.references :something, foreign_key: true
t.belongs_to :something_else, foreign_key: true
或者(注意复数):
add_foreign_key :table_name, :somethings
add_foreign_key :table_name, :something_elses`
https://stackoverflow.com/questions/7861971
复制相似问题