46

has many and belongs to manyアソシエーションのジョイントテーブルのマイグレーションを生成するために、多くのSOおよびgoogleの投稿を調べましたが、何も機能しません。マイグレーションの生成 - ジョインテーブルの作成

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

私はrails 3.2.13を使用しています。私は2つのテーブル: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 

2人のテーブルの間でどのように結合テーブルの移行を作成することを伝えることができますか?

答えて

33

を実行し、空の移行ファイルを生成するには、このコマンドを(それが自動的に読み込まれていない、あなたはそれを自分を移入する必要があります):

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という簡単な例を使って作成しました。コマンドラインでcreate_join_tableコマンドを自動入力するには

+2

このようにする場合は、フィールド定義に '' 'null:false'''を必ず追加してください。たとえば、 '' 't.integer:assignment_id、null:false'''などです。これは、ジョイントテーブルがどこにも向いていない、データの整合性が失われ、コードが転倒するという厄介な状況から保護します。 (または、醜いバグが発生しやすいガードコードでうんざりしてしまいます)。 –

+0

私は@Powersと同意し、それらの列にインデックスを追加するのはいいでしょうか? – BKSpurgeon

115

、それは次のようになります。製品のモデルとサプライヤーモデルの場合

rails g migration CreateJoinTableProductsSuppliers products suppliers 

。 Railsは "products_suppliers"という表を作成します。複数形に注意してください。

generationコマンドはちょうどgに短縮することができるサイドノート)

+42

ジョイントテーブルをより意味のあるものにするには: 'rails g migration CreateJoinTableProductsSuppliers product supplier' – zishe

+7

my_productsやmy_suppliersのような接頭辞を持つテーブルを扱うときに、my_products_my_suppliersのようなジョインテーブルを生成するので、CreateJoinTableを使用するときに注意してください。 my_products_suppliersです。 MyProduct.first.my_suppliersのような関連付けは機能しません。 https://github.com/rails/rails/issues/13683をチェック - 私のソリューションは、CreateJoinTableを使用し続けるが、 'TABLE_NAMEを追加しました::移行中my_products_suppliers' http://guides.rubyonrails.org/migrations.html –

+0

@ andrewcockerhamこれはレールで動作していなかった3.2 –

11

私は通常私が参加し、テーブルを作成するときにも、「モデル」ファイルを持っているのが好き。だから私はします。

rails g model AssignmentSecurityUser assignments_security:references user:references 
関連する問題