ActiveRecord包括不使用外键

时间:2014-07-10 20:37:49

标签: ruby-on-rails ruby activerecord

我很难让表关联正常工作。我有2个类(表),我需要彼此关联。

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

当我运行Model.with_case_info时,我得到以下SQL:

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

我正在寻找的是

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

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

您指向Model课程中的错误外键。以下是正确的。

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

belongs_to上,您说外键在此型号上。根据{{​​1}}中的has_many,外键为CaseModel,因此model_seq_id应使用相同的外键。

答案 1 :(得分:0)

我不确定您为何要手动指定primaryforeign键。您只需使用has_manybelongs_to,并确保Model表中有case_model_id字段,它会自动生效。