Rails,有一个国家,有很多ExportCountries?

时间:2013-01-13 00:01:41

标签: ruby-on-rails ruby-on-rails-3

我有列表模型和国家/地区模型。每个列表都有一个国家(作为其地址详细信息的一部分),但每个列表也可以有多个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

但是我怎么能只使用一个Country模型呢 - 因为否则ExportCountry将具有完全相同的记录,这些记录不是很干,而且似乎不像Rails一样。

1 个答案:

答案 0 :(得分:1)

你想要的是与最终结果相同的两个独立的关联。您只需要在关联中指定它们,以便它可以正确解释它们:

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应该是清单表格中的一列。

导出国家/地区的联接表

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

这为地址Country设置了一个引用,并为export_countries设置了许多引用。