我试图在我的产品和标签表之间创建一个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 :(得分:0)
有一种方法可以命名您的迁移以获取迁移自动生成定义标记,但我只是手动执行这些类型的操作。
在你的案例中你需要3个表:
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
答案 1 :(得分:0)
非常确定如果你想填写一些东西,你需要生成模型,而不是迁移。
所以,比如:
rails生成模型productstags
生成以下迁移文件:
20140930204336_create_productstags.rb
class CreateProductstags&lt; ActiveRecord的::迁移 改变 create_table:productstags do | t |
t.timestamps
end
端 端
您需要在此处或在模型生成中手动定义任何字段。但是,如果您生成迁移,则必须定义您正在执行的操作。比如说我想在我的新ProductsTags表中添加一个整数的join_id字段。
rails g migration add_join_id_to_productstags join_id:integer
生成以下内容。
class AddJoinIdToProductstags&lt; ActiveRecord的::迁移 改变 add_column:productstags,:join_id,:integer 结束 端
很确定你只需走这条路。