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 ジェネレーターを使用したのか、これらの各モデルの移行を手動で入力したのかは覚えていません。