我有3个表,我想创建存储以下内容的新表:
user_id
project_id
company_id
我已经尝试过这个命令,但它不起作用:
rails g migration CreateJoinTableUserProjectCompany
user:referencess project:referencess company:referencess
你推荐什么?
答案 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