检索父/父对象

时间:2015-11-11 15:06:48

标签: ruby-on-rails rails-activerecord

三种模式:提供者,课程和电话

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

我错过了什么?

1 个答案:

答案 0 :(得分:1)

这是因为through: :courses关系provider.calls - 它搜索该提供商的课程并从中获取电话。

另一种方式 - 简单belongs_to期望在调用时设置provider_id,这不是(因为上面的多对多关系),它不能有through,所以:

  • 使用call.course.provider(如果需要,可以将其缓存在provider_id中)