私は(比較的)簡単なRailsアプリケーションを持っています。私は3つのモデル、評価、ユーザーとチームを持っています。チームには多くのユーザーがおり、各ユーザーは評価を受けることができます。ここではモデルの切断型およびそれらに関連するスキーマは、以下のとおりです。Railsで1対1の関係を持つ奇妙さ
class User < ApplicationRecord
has_one :assessment
belongs_to :team, optional: true
end
create_table "users", force: :cascade do |t|
t.string "email"
t.string "name"
t.string "organisation_type"
t.string "position"
t.string "location"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "team_id"
t.string "locale", default: "en", null: false
end
class Team < ApplicationRecord
has_many :users
has_many :assessments, through: :users
end
create_table "teams", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
私は評価(team.users.where(assessment: nil)
を持っていないチーム内のすべてのユーザーを取得しようとします)次のエラーが表示されます。
ActiveRecord::StatementInvalid:
PG::UndefinedColumn: ERROR: column users.user_id does not exist
LINE 1: ...".* FROM "users" WHERE "users"."team_id" = $1 AND "users"."u...
^
: SELECT "users".* FROM "users" WHERE "users"."team_id" = $1 AND "users"."user_id" IS NULL
そして得られたSQL、エラーが示唆するように、少しおかしくあり:
SELECT "users".* FROM "users" WHERE "users"."team_id" = $1 AND "users"."user_id" IS NULL
そして、私は評価が存在しない場合には評価からユーザーを取得しようとすると、それはnilを返します。
私は本当にここで何かをやっていると思うが、だれでも助けることができるのだろうか?
評価のないチームのユーザには、 'team.users.includes(:assessment).where(assessment:{id:nil})'を試すことができます。 – MrYoshiji
スキーマを修正して機能させることができます。ユーザーテーブルに 'assesment_id'列を追加し、評価表から 'user_id'を削除してください。上記のコードは正常に動作するはずです。 –
いいえ。まだ何も。私は評価にユーザーを当てはめることはできません。私は '不明な属性' user_id'を書くことができません – Pezholio