Rails 4 +多密钥关联



随着finder_sql的弃用,与两个键关联是一个痛苦的工作。

假设我有两个模型,model_1model_2,都有它们唯一的id,我想与其他两个字段建立关联,假设每个模型共享两个其他键,如category_idcountry_id

现在我可以做:

class Model_1 < ActiveRecord::Base
  has_one :model_2, -> (object) { where(category_id: object.category_id)}, foreign_key: :country_id, primary_key: :country_id
end

现在我可以:

  1. m = Model1.find(x)
  2. m.model_2

这是! !,但是....

  1. m = Model1.includes(:model_2).find(x)

这不起作用,显然是因为没有object这样做。结果是NoMethodError: undefined method `category_id' for nil:NilClass .

任何人都知道如何在Rails 4.0+中解决这个问题。

我读对了吗,你想使用两列在模型1和模型2之间进行连接?也许joins会比where更合适?我不知道这是否会起作用,但是……

class Model_1 < ActiveRecord::Base
  has_one :model_2, -> {joins("model_2s ON model_1s.category_id = model_2s.category_id AND model_1s.country_id = model_2s.country_id")}
end

最新更新