生成迁移以创建连接3个表的表

时间:2014-06-25 18:11:32

标签: ruby-on-rails ruby-on-rails-4

我有3个表,我想创建存储以下内容的新表:

user_id 
project_id 
company_id

我已经尝试过这个命令,但它不起作用:

rails g migration CreateJoinTableUserProjectCompany 
    user:referencess project:referencess company:referencess

你推荐什么?

3 个答案:

答案 0 :(得分:1)

我实际上不确定如何生成迁移以创建仅包含这三列 id列的连接表。显然我们可以编辑生成的迁移并对其进行编辑(我将在我的回答中做),但那里的乐趣在哪里?

有人说了,显然已经删除了所有的乐趣,我建议创建一个完整的表,包括id列,即使你可能认为你不需要它。它可能会派上用场(这两个u-p-c中的哪一个是首先创建的,我需要将这个模型放在嵌套的形式中,等等)。要创建包含id的表,只需运行以下命令即可。

rails g migration CreateUserProjectCompany user:references project:references company:references

运行创建的迁移将创建一个类似于以下内容的表:

id | user_id | project_id | company_id

要创建没有id的表,您很遗憾需要编辑迁移。替换此行...

create_table :user_project_companies do |t|

......用这个。

create_table :user_project_companies, id: false do |t|

I.E。,在表名后面添加, id: false,表明该表不应该有id列。运行此迁移将为您提供仅包含三列的表。

user_id | product_id | company_id

答案 1 :(得分:1)

单独生成迁移不会使用列参数,除非您要向现有模型添加或删除列。你需要生成一个模型来完成你想要做的事情(差不多)。例如:

rails g model UserProjectCompany user:references project:references company:references

这将产生以下迁移:

class CreateUserProjectCompanies < ActiveRecord::Migration
  def change
    create_table :user_project_companies do |t|
      t.references :user
      t.references :project
      t.references :company

      t.timestamps
    end
    add_index :user_project_companies, :user_id
    add_index :user_project_companies, :project_id
    add_index :user_project_companies, :company_id
  end
end

但请注意,如果您不需要,则必须添加:id => false并删除t.timestamps

另一件事是它还会生成一个名为&#34; UserProjectCompanies&#34;以及它的一些规格。

答案 2 :(得分:0)

嘿,你做错字错误引用,而是使用引用

 rails g migration CreateJoinTableUserProjectCompany user:references project:references company:references