随着finder_sql的弃用,与两个键关联是一个痛苦的工作。
假设我有两个模型,model_1
和model_2
,都有它们唯一的id,我想与其他两个字段建立关联,假设每个模型共享两个其他键,如category_id
和country_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
现在我可以:
-
m = Model1.find(x)
-
m.model_2
这是! !,但是....
-
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