Ruby on rails Rails 5-has_one:through with:class_name不';不提供相关记录
我对3种不同的模型有着直接的联系:Ruby on rails Rails 5-has_one:through with:class_name不';不提供相关记录,ruby-on-rails,activerecord,heroku,ruby-on-rails-5,Ruby On Rails,Activerecord,Heroku,Ruby On Rails 5,我对3种不同的模型有着直接的联系: class Claim < ApplicationRecord has_one :private_car, class_name: 'Car' has_one :company_car, class_name: 'Car' has_one :user, through: :private_car end class Car < ApplicationRecord belongs_to :claim belongs_to :us
class Claim < ApplicationRecord
has_one :private_car, class_name: 'Car'
has_one :company_car, class_name: 'Car'
has_one :user, through: :private_car
end
class Car < ApplicationRecord
belongs_to :claim
belongs_to :user
end
class User < ApplicationRecord
has_many :cars
end
控制台输出如下所示:
2.3.1 :007 > Claim.first.private_car
Case Load (0.4ms) SELECT "cases".* FROM "claims" WHERE "claims"."deleted_at" IS NULL ORDER BY "claims"."id" ASC LIMIT $1 [["LIMIT", 1]]
Car Load (0.2ms) SELECT "cars".* FROM "cars" WHERE "cars"."deleted_at" IS NULL AND "cars"."claim_id" = $1 LIMIT $2 [["claim_id", 1], ["LIMIT", 1]]
=> nil
2.3.1 :008 > Claim.first.private_car_id
Claim Load (0.6ms) SELECT "claims".* FROM "claims" WHERE "claims"."deleted_at" IS NULL ORDER BY "claims"."id" ASC LIMIT $1 [["LIMIT", 1]]
=> 1
2.3.1 :009 > Claim.first.user
Claim Load (0.3ms) SELECT "claims".* FROM "claims" WHERE "claims"."deleted_at" IS NULL ORDER BY "claims"."id" ASC LIMIT $1 [["LIMIT", 1]]
User Load (0.5ms) SELECT "users".* FROM "users" INNER JOIN "cars" ON "users"."id" = "cars"."user_id" WHERE "users"."deleted_at" IS NULL AND "cars"."deleted_at" IS NULL AND "cars"."claim_id" = $1 LIMIT $2 [["claim_id", 1], ["LIMIT", 1]]
=> nil
知道关联被破坏的原因吗?当您指定一个
与类名
有关系时(不指定外键
),rails按惯例在模型类名
上查找外键类名id
所以,有一个:私家车,类名:'car'
正在寻找型号车上的外键car\u id
,这不是你想要的
你想要的是这个
class Claim < ApplicationRecord
has_one :private_car, class_name: 'Car', foreign_key: 'private_car_id'
has_one :company_car, class_name: 'Car', foreign_key: 'company_car_id'
has_one :user, through: :private_car
end
类别声明
当您指定时,在车型上定义的外键私家车\u id
和公司车\u id
与类别名称
有关系(不指定外键
),按照惯例,rails会在模型class\u name
上查找外键class\u name\u id
所以,有一个:私家车,类名:'car'
正在寻找型号车上的外键car\u id
,这不是你想要的
你想要的是这个
class Claim < ApplicationRecord
has_one :private_car, class_name: 'Car', foreign_key: 'private_car_id'
has_one :company_car, class_name: 'Car', foreign_key: 'company_car_id'
has_one :user, through: :private_car
end
类别声明
使用型号car
上定义的外键private\u car\u id
和company\u car\u id