0

我有以下 ActiveRecord 模型:

class User < ActiveRecord::Base
  has_one :faculty
end

class Faculty < ActiveRecord::Base
  belongs_to :head, class_name: 'User', foreign_key: :user_id
end

当我尝试使用此关联来拉用户时,faculty.head我得到的记录没有错误,但是当我输入时,user.faculty我得到一个错误:

  Faculty Load (1.8ms)  SELECT "faculties".* FROM "faculties" WHERE "faculties"."user_id" = 1 LIMIT 1
ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR:  operator does not exist: character varying = integer
LINE 1: ...".* FROM "faculties"  WHERE "faculties"."user_id" = 1 LIMIT ...

我的faculties数据库架构如下所示:

create_table "faculties", :force => true do |t|
    t.string   "name"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.string   "user_id"
 end

这是一些PG错误吗?

4

3 回答 3

2

错误消息说:

错误:运算符不存在:字符变化 = 整数

这意味着您正在尝试比较 varchar 值(表的user_id字段faculties)和整数值(表的id字段users),这是不允许的。

您必须将外键定义user_idinteger

create_table "faculties", :force => true do |t|
    # ...
    t.integer "user_id"
 end
于 2013-08-07T09:33:53.997 回答
2

发生错误是因为您将user_id列作为字符串,而不是整数。

于 2013-08-07T09:34:02.557 回答
2

正如你user_id的那样foreign_key,它应该是integer

t.string   "user_id"

应该

t.integer   "user_id"
于 2013-08-07T09:33:38.823 回答