0

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

4

1 回答 1

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

以及出口国家的连接表

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

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

于 2013-01-13T18:16:59.883 回答