三种模式:提供者,课程和电话
class Provider < ActiveRecord::Base
has_many :courses, dependent: :destroy
has_many :calls, through: :courses
end
class Course < ActiveRecord::Base
has_many :calls, dependent: :destroy
has_many :facilities, through: :calls
belongs_to :provider
end
class Call < ActiveRecord::Base
belongs_to :course
belongs_to :provider
has_one :facility
end
我知道我可以provider.calls
完成所有提供者课程的所有电话。呼叫133在结果中。但是,如果我Call.find(133).provider
,则返回nil
。
我错过了什么?
答案 0 :(得分:1)
这是因为through: :courses
关系provider.calls
- 它搜索该提供商的课程并从中获取电话。
另一种方式 - 简单belongs_to
期望在调用时设置provider_id,这不是(因为上面的多对多关系),它不能有through
,所以:
call.course.provider
(如果需要,可以将其缓存在provider_id中)