Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 5-has_one:through with:class_name不';不提供相关记录_Ruby On Rails_Activerecord_Heroku_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails Rails 5-has_one:through with:class_name不';不提供相关记录

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

我对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 :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