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