2013-08-07 172 views
0

我有以下的ActiveRecord型号:HAS_ONE协会不工作

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错误吗?

+2

你的院系表的模式是什么? –

+0

奇怪!请尝试belongs_to:head,class_name:'User',foreign_key:'user_id' –

+0

@BachanSmruty它应该如何解决问题?问题在于'has_one:faculty'关联。 –

回答

2

错误的发生是因为你有你的user_id列作为一个字符串,而不是整数。

2

由于您的user_idforeign_key应该integer

t.string "user_id" 

应该

t.integer "user_id" 
2

错误消息说:

 
ERROR: operator does not exist: character varying = integer 

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

你必须定义外键user_idinteger

create_table "faculties", :force => true do |t| 
    # ... 
    t.integer "user_id" 
end