生成迁移 - 创建连接表

时间:2013-07-20 18:18:16

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 migration jointable

我查看了许多SOgoogle帖子,以便为has many and belongs to many关联生成联接表的迁移,但没有任何效果。

所有解决方案都生成一个空的迁移文件。

我正在使用rails 3.2.13,我有两张表:security_usersassignments。这些是我尝试过的一些事情:

rails generate migration assignments_security_users

rails generate migration create_assignments_security_users

rails generate migration create_assignments_security_users_join_table

rails g migration create_join_table :products, :categories (following the official documentation)

rails generate migration security_users_assignments security_user:belongs_to assignments:belongs_to 

任何人都可以告诉如何在两个表之间创建连接表迁移吗?

5 个答案:

答案 0 :(得分:144)

要在命令行中自动填充create_join_table命令,它应如下所示:

rails g migration CreateJoinTableProductsSuppliers products suppliers

对于产品型号和供应商型号。 Rails将创建一个名为“products_suppliers”的表。注意复数。

(旁注,generation命令可以缩短为g

答案 1 :(得分:36)

运行此命令以生成空的迁移文件(它不会自动填充,您需要自己填充):

rails generate migration assignments_security_users

打开生成的迁移文件并添加以下代码:

class AssignmentsSecurityUsers < ActiveRecord::Migration
  def change
    create_table :assignments_security_users, :id => false do |t|
      t.integer :assignment_id
      t.integer :security_user_id
    end
  end
end

然后从终端运行rake db:migrate。我用一个可能对您有帮助的简单示例创建了a quiz on many_to_many relationships

答案 2 :(得分:17)

在创建连接表时,我通常也喜欢使用“模型”文件。所以我这样做。

rails g model AssignmentSecurityUser assignments_security:references user:references

答案 3 :(得分:0)

我相信这将是Rails 5的更新答案

create_table :join_table_name do |t|
  t.references :table_name, foreign_key: true
  t.references :other_table_name, foreign_key: true
end

答案 4 :(得分:0)

在 rails 中嵌入了连接表生成

rails g migration AddCityWorkerJoinTable cities:uniq workers

生成以下迁移

create_join_table :cities, :workers do |t|
  t.index [:city_id, :worker_id], unique: true
end

❗️注意:

  • 按字母顺序排列的模型名称
  • 仅将 :uniq 放在第一个参数上