铁路,有一个国家和许多出口国



我有一个清单模型和一个国家模型。每个清单都有一个国家(作为其地址详细信息的一部分),但每个清单也可以有几个ExportCountries(即清单所有者出口到的国家)。

A listing has_one country

A Country has_many listings

A listing has_and_belongs_to_many ExportCountries

An ExportCountry has_and_belongs_to_many Listings

如果我有两个独立的模型,我可能会这样做:

class Listing < ActiveRecord::Base
  belongs_to :country
  has_and_belongs_to_many :export_countries  
end
class Country < ActiveRecord::Base
  has_many: listings
end
class ExportCountry < ActiveRecord::Base
  has_and_belongs_to_many :listings
end

但是我怎么能做到只有一个国家模型-因为否则ExportCountry将有完全相同的记录,这不是很DRY,只是不像rails。

您需要的是具有相同类的两个独立关联作为最终结果。您只需要在关联中指定这些,以便它可以正确地解释它们,如下所示:

class Country < ActiveRecord::Base
  has_many :address_listings, class_name: "Listing", :foreign_key => "address_country_id"
  has_and_belongs_to_many :export_listings, class_name: "Listing", :join_table => :export_countries_listings
end
class Listing < ActiveRecord::Base
  belongs_to :address_country, class_name: "Country"
  has_and_belongs_to_many :export_countries, class_name: "Country", :join_table => :export_countries_listings
end

address_country_id应该是listing表中的一列。

和出口国家的联接表

create_table :export_countries_listings, :id => false do |t|
  t.integer :country_id
  t.integer :listing_id
end

为地址Country设置一个引用,为export_countries设置多个引用。

相关内容

  • 没有找到相关文章

最新更新