0

Rails では、My Membership モデルの移行は次のようになります。

class CreateMemberships < ActiveRecord::Migration
  def change
    create_table :memberships do |t|
      t.integer :user_id
      t.integer :organization_id
      t.integer :membership_type_id

      t.timestamps
    end
  end
end

そして私のユーザーモデルの移行:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :first_name
      t.string :last_name
      t.string :email

      t.timestamps
    end
  end
end

私には、これらはほとんど同じに見えます。ただし、の表を見ると、次のようになりますpsql

cd_dev=# \d memberships
                  Table "public.memberships"
       Column       |            Type             | Modifiers 
--------------------+-----------------------------+-----------
 id                 | integer                     | not null

cd_dev=# \d users
                                       Table "public.users"
    Column     |            Type             |                     Modifiers                      
---------------+-----------------------------+----------------------------------------------------
 id            | integer                     | not null default nextval('users_id_seq'::regclass)

つまり、membershipsテーブルの id フィールドは自動的に割り当てられません。Rails コンソールで、単純に新しいメンバーシップを作成しようとすると、次のMembership.create(user_id: 1, organization_id: 1)ように言って失敗します。

ActiveRecord::StatementInvalid: PG::Error: ERROR: null value in column "id" violates not-null constraint

idでフィールドを正しく機能させる方法をおそらくグーグルで検索できmembershipsますが、理解できないのは、これがどのように起こったかです。Rails/Postgres について知っておくべきことはありますか? Rails ジェネレーターを使用したのか、これらの各モデルの移行を手動で入力したのかは覚えていません。

4

1 に答える 1

1

これは正常ではありません。データベースを手動でいじっていませんか? 試す

rake db:drop db:create db:migrate
于 2013-03-03T13:27:49.317 に答える