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

あなたuser_idforeign_keyそうであるべきですinteger

t.string   "user_id"

する必要があります

t.integer   "user_id"
于 2013-08-07T09:33:38.823 に答える
2

エラーメッセージには次のように記載されています。

エラー: 演算子が存在しません: 文字変数 = 整数

user_idこれは、varchar 値 (テーブルのフィールド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 に答える