如何覆盖has_many关联,以便显示父模型的默认值

时间:2016-07-31 22:58:31

标签: ruby-on-rails

有三种型号:CountryCityPlan

计划可以与国家或城市相关联。如果城市有计划,那么返回那些计划。如果城市没有计划,那么返回该城市的国家计划。

例如:

United_Kingdom有三个计划:uk_default_1uk_default_2uk_default_3

London有两个计划:london_1london_2

Leeds没有关联的计划。

LondonLeeds属于United_Kingdom

我想实现:

London.plans # [london_1, london_2]
Leeds.plans # [uk_default_1, uk_default_2, uk_default_3]

我开始定义以下关系:

class Country < ActiveRecord::Base
  has_many :cities
end

class City < ActiveRecord::Base
  belongs_to :country
  has_many :plans
end

class Plan < ActiveRecord::Base
  belongs_to :country
  belongs_to :city
end

但我不知道怎么离开这里。我怎样才能以铁轨的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

我可能只是在城市模型中制作并使用新方法active_plans,如果存在,将返回城市规划,如果不存在则返回国家计划......

class Country < ActiveRecord::Base
  has_many :cities
  has_many :plans # added to support "country.plans in City model"
end

class City < ActiveRecord::Base
  belongs_to :country
  has_many :plans

  def active_plans
    return plans if plans.present?
    return country.plans
  end
end