12

2 つのモデル間に単純な has_and_belongs_to_many 関係があります。そのモデルにいくつかのパラメーターを追加したいので、それを has_many :through モデルに変更する必要があります。

私が知っているように、id列を追加する必要があります(追加で必要な列とともに)。ただし、これを行う方法については 100% 明確ではありません。整数列 :id を追加すると、Rails はそれが 'id' プライマリ キーであることを認識しますか?

最新の 3.x を使用しています。

4

4 に答える 4

15

レールによって作成された has_and_belong_to 多くのデータベーステーブルがpatients_physiciansであると仮定します

このようなモデルを生成するだけです

rails g model patients_physician --skip-migration

その後、次のような移行コマンドで必要な列を追加できます

rails g migration add_new_column_to_patients_physician new_column

データはそのまま残り、生成したモデルに基づいてクエリを実行できます。

追加することを忘れないでください

belongs_to :model_1
belongs_to :model_2 

新しく追加されたモデルpatients_physicianに

次に、必要なモデルで実行できるようになります。

has_many patients_physician
has_many :model_2, through: :patients_physician
于 2015-02-20T11:57:55.590 に答える
11

移行時にテーブルに id を追加するだけです:

add_column :table, :id, :primary_key

この回答から参照

于 2013-10-17T15:18:59.713 に答える
6

これは、チームとユーザーの間の has_and_belongs_to_many 関係を変換するために使用した移行です。

class CreateTeamMembers < ActiveRecord::Migration
  def up
    # Create a new table with id and timestamps to replace the old one
    create_table :team_members do |t|
      t.belongs_to :team
      t.belongs_to :user
      t.timestamps
    end

    # Now populate it with a SQL one-liner!
    execute "insert into team_members(team_id,user_id) select team_id,user_id from teams_users"

    # drop the old table
    drop_table :teams_users
  end

  def down
    # This leaves the id and timestamps fields intact
    rename_table :team_members, :teams_users
  end
end
于 2015-03-15T23:59:46.683 に答える