Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 ActiveRecord包括不使用外键_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails ActiveRecord包括不使用外键

Ruby on rails ActiveRecord包括不使用外键,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我很难让表关联正常工作。我有两个需要相互关联的类表 class CaseModel < ActiveRecord::Base self.primary_key = 'seq_id' has_many :model, foreign_key: 'model_seq_id' end class Model < ActiveRecord::Base self.primary_key = 'seq_id' self.table_name = 'model'

我很难让表关联正常工作。我有两个需要相互关联的类表

class CaseModel < ActiveRecord::Base
    self.primary_key = 'seq_id'
    has_many :model, foreign_key: 'model_seq_id'
end

class Model < ActiveRecord::Base

  self.primary_key = 'seq_id'
  self.table_name = 'model'

  belongs_to :case_model, foreign_key: 'seq_id'
  scope :with_case_info, ->{includes(:case_model)}
end
我要找的是

SELECT "CASE_MODEL".* FROM "CASE_MODEL"  WHERE "CASE_MODEL"."MODEL_SEQ_ID" IN (results from above sql)

非常感谢您的帮助

我不知道您为什么要手动指定主键和外键。您可以简单地使用has\u many和belishing\u,并确保模型的表具有case\u Model\u id字段,并且它将自动工作。

您在模型类中指向了错误的外键。以下是正确的

class Model < ActiveRecord::Base

  self.primary_key = 'seq_id'
  self.table_name = 'model'

  belongs_to :case_model, foreign_key: 'model_seq_id'
  scope :with_case_info, ->{includes(:case_model)}
end

在所属的上,您的意思是外键在这个模型上。基于has_many in CaseModel,外键是model_seq_id,因此model应该使用相同的外键。

在处理遗留数据时,这并不总是可能的。正如@SeanHill所说,我处理的是遗留数据,无法修改表schemaGotcha,它的措辞让我觉得它是一个新的添加。现在我得到了一些完全错误的CASE_MODEL.SEQ_ID在0Ah中,请尝试在关系的两侧设置primary_key选项,以指向正确的主键。默认情况下,它假定id是主键,但这里不是这种情况。属于:case_model,foreign_key:'model_seq_id',primary_key:'seq_id',等等,所以我可以为每个要链接的外键设置不同的主键?所以它是‘属于:表,外键:我的列,主键:你的列,然后在另一个表上:has\u many:first\u table是的,但是你还必须在has\u many:first\u tables上设置相同的选项,外键:“my\u column”,主键:“your\u column”。
class Model < ActiveRecord::Base

  self.primary_key = 'seq_id'
  self.table_name = 'model'

  belongs_to :case_model, foreign_key: 'model_seq_id'
  scope :with_case_info, ->{includes(:case_model)}
end