【问题标题】:Rails model user ID PG ERROR: NotNullViolationRails 模型用户 ID PG 错误:NotNullViolation
【发布时间】:2014-06-25 17:32:52
【问题描述】:

我正在使用 rails 4、postgres 9.3 和 devise,在注册用户时,我收到以下错误:

    PG::NotNullViolation: ERROR: the null value for column « usuario_id » violates the constraint not null. 

表或模型usuario的主键或ID是usuario_id,它是一个整数。

我知道它违反了 de 约束,但是如何在不通过注册表单输入 ID 的情况下自动增加 ID?

我没有进行迁移,因为它没有必要,因为我已经在 postgres 中有表。我添加的唯一列是设计列。无论如何,这是来自 postgresql 的表。

                           Tabla «public.usuario»
    Column         |            Type            |                  Modifiers                   
------------------------+-----------------------------+---------------------------------
usuario_id             | integer                     | not null
comuna_id              | integer                     | not null
usuario_nombre         | character(256)              | 
usuario_apellidopat    | character(256)              | 
usuario_apellidomat    | character(256)              | 
usuario_rut            | character varying(1024)     | 
email                  | character varying(1024)     | 
usuario_nombre_usuario | character(256)              | 
password               | character varying(128)      | 
usuario_vip            | boolean                     | 
usuario_calle          | character varying(128)      | 
usuario_numero_calle   | smallint                    | 
usuario_villa          | character varying(128)      | 
usuario_numero_depto   | smallint                    | 
usuario_bloque         | smallint                    | 
encrypted_password     | character varying(255)      | not null valor por omisión      
reset_password_token   | character varying(255)      | 
reset_password_sent_at | timestamp without time zone | 
remember_created_at    | timestamp without time zone | 
sign_in_count          | integer                     | not null valor por omisión 0
current_sign_in_at     | timestamp without time zone | 
last_sign_in_at        | timestamp without time zone | 
current_sign_in_ip     | character varying(255)      | 
last_sign_in_ip        | character varying(255)      | 
confirmation_token     | character varying(255)      | 
confirmed_at           | timestamp without time zone | 
confirmation_sent_at   | timestamp without time zone | 
unconfirmed_email      | character varying(255)      | 
 Índexes:
"pk_usuario" PRIMARY KEY, btree (usuario_id)
"index_usuario_on_reset_password_token" UNIQUE, btree (reset_password_token)
"usuario_pk" UNIQUE, btree (usuario_id)
"relationship_34_fk" btree (comuna_id)
Foreign key constraints:
"fk_usuario_relations_comuna" FOREIGN KEY (comuna_id) REFERENCES comuna(comuna_id) ON UPDATE RESTRICT ON DELETE RESTRICT
Referenced by:
TABLE "compra_remate" CONSTRAINT "fk_compra_r_relations_usuario" FOREIGN KEY (usu_usuario_id) REFERENCES usuario(usuario_id) ON UPDATE RESTRICT ON DELETE RESTRICT
TABLE "compra_remate" CONSTRAINT "fk_compra_r_relations_usuario2" FOREIGN KEY (usuario_id) REFERENCES usuario(usuario_id) ON UPDATE RESTRICT ON DELETE RESTRICT
TABLE "compra_venta_especial" CONSTRAINT "fk_compra_v_relations_usuario" FOREIGN KEY (usu_usuario_id) REFERENCES usuario(usuario_id) ON UPDATE RESTRICT ON DELETE RESTRICT
TABLE "compra_venta_normal" CONSTRAINT "fk_compra_v_relations_usuario" FOREIGN KEY (usu_usuario_id) REFERENCES usuario(usuario_id) ON UPDATE RESTRICT ON DELETE RESTRICT
TABLE "compra_venta_especial" CONSTRAINT "fk_compra_v_relations_usuario2" FOREIGN KEY (usuario_id) REFERENCES usuario(usuario_id) ON UPDATE RESTRICT ON DELETE RESTRICT
TABLE "compra_venta_normal" CONSTRAINT "fk_compra_v_relations_usuario2" FOREIGN KEY (usuario_id) REFERENCES usuario(usuario_id) ON UPDATE RESTRICT ON DELETE RESTRICT
TABLE "notificacion" CONSTRAINT "fk_notifica_relations_usuario" FOREIGN KEY (usuario_id) REFERENCES usuario(usuario_id) ON UPDATE RESTRICT ON DELETE RESTRICT
TABLE "prod_of_nec" CONSTRAINT "fk_prod_of__relations_usuario" FOREIGN KEY (usuario_id) REFERENCES u:

【问题讨论】:

  • 我们可以查看您为usuario_id 列所做的迁移吗?

标签: ruby-on-rails postgresql ruby-on-rails-4 devise postgresql-9.3


【解决方案1】:

首先,在您的用户模型迁移中,是否将用户表的主键更改为usuario_id?请参阅以下 Stackoverflow 问题:

其次,您是否确保覆盖了 ActiveRecord 模型中主键的命名约定?

类似这样的:

class User < ActiveRecord::Base
  self.primary_key = "usuario_id"
end

请参阅以下section in the Rails Guide 了解更多详情。

【讨论】:

  • 我没有进行迁移,因为它是不必要的,因为我已经在 postgresql 中有表。我刚刚做了脚手架,但我删除了迁移文件,因为它们是不必要的。其次,是的,我做了 self.primary_key = "usuario_id"
  • 嗯,很有趣。能否也贴一下型号代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 2017-11-23
  • 1970-01-01
相关资源
最近更新 更多