HABTM协会

时间:2014-09-30 20:29:23

标签: ruby-on-rails activerecord has-and-belongs-to-many

我试图在我的产品和标签表之间创建一个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命令?

2 个答案:

答案 0 :(得分: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

答案 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   结束 端

很确定你只需走这条路。