在Rails(3.2)中,实现等效于县belongs_to_many
Zipcodes和Zipcode has_one
县的正确方法是什么,因为没有名为belongs_to_many的关联?
两个模型都有county_code
,这在县中是唯一的,而在Zipcode中标识该县的所有邮政编码。 (这个例子假设zipcodes永远不会跨越县)
使用has_one和belongs_to不提供访问县内所有zipcodes的方法:
class Zipcode < ActiveRecord::Base
has_one :county, foreign_key: "county_code", primary_key: "county_code"
end
class County < ActiveRecord::Base
# belongs_to_many would be correct, if such a thing existed
belongs_to :zipcode, foreign_key: "county_code", primary_key: "county_code"
end
# not defined because of the belongs_to
all_zipcodes_in_in_1st_county = County.first.zipcodes
另一方面,使用has_one加上has_many 似乎来做这个伎俩:
class Zipcode < ActiveRecord::Base
has_one :county, foreign_key: "county_code", primary_key: "county_code"
end
class County < ActiveRecord::Base
has_many :zipcodes, foreign_key: "county_code", primary_key: "county_code"
end
省略某种形式的belongs_to打破我没有测试的东西?
答案 0 :(得分:2)
通常情况下,您会使用belongs_to
代替has_one
进行反向关系(例如Zipcode
会使用belongs_to
代替has_one
)。两者之间的区别在于belongs_to
表示基础表具有指向另一个表的外键字段,其中has_one
表示它具有指向其后的外键的相关表目前的表格。
由于您在两个表上都有county_code
字段(因此必须明确声明哪些字段将用作FK和PK),因此您可以有效地使用has_one
或{{1}可交替地,它更多地是在语义上正确的问题。