web-dev-qa-db-ja.com

移行の生成-結合テーブルの作成

has many and belongs to manyアソシエーションの結合テーブルの移行を生成するために、多くのSOおよびgoogleの投稿を調べましたが、何も機能しません。

すべてのソリューションが空の移行ファイルを生成しています。

Rails 3.2.13を使用していますが、security_usersassignmentsの2つのテーブルがあります。これらは私が試したもののいくつかです:

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 

誰でも2つのテーブル間の結合テーブルの移行を作成する方法を教えてもらえますか?

62
gotqn

このコマンドを実行して、空の移行ファイルを生成します(自動的には入力されません。自分で入力する必要があります)。

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を実行します。 many_to_many関係のクイズ を作成しました。簡単な例があります。

37
Powers

コマンドラインでcreate_join_tableコマンドを自動入力するには、次のようになります。

Rails g migration CreateJoinTableProductsSuppliers products suppliers

製品モデルおよびサプライヤーモデルの場合。 Railsは「products_suppliers」というタイトルのテーブルを作成します。複数形に注意してください。

generationコマンドはgに短縮できることに注意してください)

153
andrewcockerham

私は通常、結合テーブルを作成するときに「モデル」ファイルも持っているのが好きです。したがって、私はします。

Rails g model AssignmentSecurityUser assignments_security:references user:references
20
Prakash Raman

これは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
0
Cody Elhard