2017-07-13 3 views
-1

私はUserTypeとUserモデルを持っています。関連は次のとおりです。には1つあり、結合に属します

UserType 
has_one :user 

User 
belongs_to user_type 

私が試してみましたそのUSER_TYPE名はX.

あるユーザーを取得しようとしています。

User.joins(:user_type).where(:user_type => {name: 'X'}).all 

エラーが発生します。

`require' 
    from /app/bin/rails:8:in `<main>'irb(main):015:0> User.joins(:user_type).where(:user_type => {name: 'normal'}).all 
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "user_type" 
LINE 1: ...sers" ON "user_types"."id" = "users"."user_type_id" WHERE "user_type"."u... 
                  ^
: SELECT "users".* FROM "users" INNER JOIN "user_types" ON "user_types"."id" = "users"."user_type_id" WHERE "user_type"."name" = $1 
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "user_type" 
LINE 1: ...sers" ON "user_types"."id" = "users"."user_type_id" WHERE "user_type"."u... 
                  ^
: SELECT "users".* FROM "users" INNER JOIN "user_types" ON "user_types"."id" = "users"."user_type_id" WHERE "user_type"."name" = $1 
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "user_type" 
LINE 1: ...sers" ON "user_types"."id" = "users"."user_type_id" WHERE "user_type"."u... 
+1

を使用する必要があり、N + 1問題を回避したい場合は、私たちにエラーを共有する気にしますか? –

答えて

1

私はあなたの関連付けの設定が正しいことを確認していないが

あなたはuser_type

User 
belongs_to :user_type 

前にコロンを追加する必要がありますそして、あなたが参加したクエリにtable nameを使用する必要があります。デフォルトでは

、USER_TYPEのテーブル名はuser_types

User.joins(:user_type).where(:user_types => {name: 'X'}).all 

であり、あなたはあなたがincludes

User.includes(:user_type).where(:user_types => {name: 'X'}).all 
+0

欠けている部分は 'デフォルトで、user_typeのテーブル名はuser_types'です –

関連する問題