我想知道如何在我的模型中添加关联.假设我生成了两个模型

rails generate model User
rails generate model Car

现在我想添加一个关联,这样模型就可以获得这个表单

class User < ActiveRecord::Base
  has_many :cars
end
class Car < ActiveRecord::Base
  belongs_to :user
end

问题是:如何通过迁移应用这种修改,以获取数据库中的cars_users表?我计划在代码中使用该表.

推荐答案

belongs_to关联在其对应的表中预期有association_id列.由于cars属于用户,cars表应该有一个user_id列.这可以通过两种方式实现.

首先,可以在创建模型时生成列

rails g model car user_id:references

或者在创建了Richard Brown的答案那样的模型后添加用户id.请注意,如果使用integer而不是references,则必须自己创建索引.

rails g migration add_user_id_to_cars user_id:integer

然后在生成的迁移中,添加

add_index :cars, :user_id

更新:

正如Joseph在 comments 中提到的,手动添加索引的需求已经在当前版本的Rails中得到了解决.我认为它是在Rails 4中引入的.你可以在official Rails guide for migrations页阅读更多内容.其要点是运行以下生成器

bin/rails g migration add_user_to_cars user:references

将创建一个类似于

add_reference :cars, :user, index: true

这将向cars表中添加一个user_id列,并将该列标记为索引.

Ruby-on-rails相关问答推荐

参数数量错误(给定1个,预期为0个;必需关键字:IO、文件名)-活动存储

查询Where Date.parse Rails

如何判断字符串中是否包含列值

Heroku、Selenium、Chome和Chromedriver的复杂问题(抱歉,无法简单描述,请阅读详细信息)

多对多模型通过控制台创建记录不起作用

Rails 3 应用程序的 MySQL 集群 (NDB) 与 MySQL 复制 (InnoDB):优点/缺点?

撬Ruby 如何重新加载?

Rails 发现获取 ActiveRecord::RecordNotFound

理解 Gemfile.lock:删除 Gemfile.lock 然后再次运行 bundle install 可以吗?

如何在终端中查看 Heroku 应用程序的当前数据库架构?

Rails:使用 RSpec 测试命名范围

Ruby on Rails 中的MySQL 服务器已经消失

我们如何在 Rails Mailer 中设置邮箱发件人的名称?

在 Rails 路由中更改 id 参数

Rspec:如何在控制器规范中分配实例变量

活动管理员:仅自定义新表单

Heroku - 在浏览器中显示当前提交的哈希

向 Rails 模型添加外键

ruby on rails 如何处理 NaN

如何删除特殊字符?