2014-09-30 89 views
0

我试图创建我的产品和标签表之间的HABTM关联。我跑的自动化迁移在我的终端为:HABTM协会

rails generate migration create_products_tags_join_table 

然后

rake db:migrate 

后,我跑我认为我的移民文件看起来像什么,我就http://guides.rubyonrails.org/association_basics.html但不是我的移民阅读这些命令文件看起来像这样

class CreateProductsTagsJoinTable < ActiveRecord::Migration 
    def up 
    end 

    def down 
    end 
end 

我需要硬编码在这些方法中的迁移,然后再次运行rake db:migrate命令?

回答

0

有办法可以将您的迁移命名为获得迁移自动生成定义标记,但我只是手动执行这些类型的事情。

在你的情况,你需要3个表:(此排名不分先后的问题这是你的连接表)

  • 产品
  • 标签
  • products_tags。

产品表迁移

class CreateProductsTable < ActiveRecord::Migration 
    def change 
    create_table :products do |t| 
     # whatever you want here... 
    end 
    end 
end 

标签表迁移

class CreateTagsTable < ActiveRecord::Migration 
    def change 
    create_table :tags do |t| 
     # whatever you want here... 
    end 
    end 
end 

加入表迁移

class CreateProductsTagsJoinTable < ActiveRecord::Migration 
    def change 
    create_table :products_tags , :id => false, force: true do |t| 
     t.integer :product_id 
     t.integer :tag_id 
    end 
    end 
end 
+0

谢谢@Andrew我会手动将连接写入迁移文件。只是好奇你知道这些命令会自动生成定义标签到迁移文件中吗? – bigREDcode 2014-09-30 21:16:11

+0

我认为这三个命令可能会诀窍,虽然我没有测试。 “rails g迁移CreateTagsTable产品:引用”,“rails g迁移CreateProductsTable标记:引用”和“rails g迁移CreateJoinTableProductsTags产品标记”。在这里检查“创建迁移”部分:http://guides.rubyonrails.org/migrations.html – Andrew 2014-10-01 20:18:49

0

很肯定,如果你想要一些东西填写,你需要生成模型,而不是迁移。

所以,像这样:

轨生成模型productstags

也就是说生成以下迁移文件:

20140930204336_create_productstags.rb

类CreateProductstags <的ActiveRecord ::迁移 DEF改变 create_table:productstags do | t |

t.timestamps 
end 

末 结束

你需要定义的任何字段手动在这里或在模型生成。但是,如果你生成一个迁移,你必须定义你在做什么。比如说,我想为我的新ProductsTags表添加一个join_id字段,该字段是一个整数。

导轨克迁移add_join_id_to_productstags join_id:整数

即生成以下。

类AddJoinIdToProductstags <的ActiveRecord ::迁移 DEF改变 add_column:productstags,:join_id,:整数 结束 结束

敢肯定你只需要走这条路。