0

我有一个小应用程序,允许用户上传食谱并保存最喜欢的食谱。我有一个名为 country 的单独模型,其中包含世界上所有的国家,然后允许用户从下拉列表中选择一个。

最初我的协会是

食谱

has_one :country

国家

belongs_to :recipe

经过一些研究,正确的关联是

食谱

belongs_to :country

国家

belongs_to :recipe

配方模型中的外键 country_id。

我打算再读一些,但想知道是否有人可以解释为什么是这种关联而不是第一个关联

4

2 回答 2

2

我邀请您像这样建立关联:

  • 国家可以有很多食谱
  • 食谱属于一个国家

如果是这样,您应该将关联定义为:

国家:

has_many :recipes

食谱:

belongs_to :country

而且我认为您的第二个关联也不正确。

当您belongs_to :country在 Recipe 模型中定义时,这意味着您的 Recipe 表必须有一个名为 的列country_id。它是 Country 模型的外键。

在第一个定义关联中,Country模型将有一个名为 的列recipe_id,因此,每个国家/地区只有一个配方,这不是您想要的,对吧?为什么它不起作用?因为一个国家只有一个记录,所以一个国家只能有一个食谱,通过recipe_id.

对于第一个关联,您的关联是一对一的(一个国家有一个食谱),而您实际上希望您的关联是一对多的(一个国家有很多食谱)。所以这就是为什么第一个关联不起作用的原因(第二个也是)。

The main thing you need to remember here is, what model you put a belongs_to association, that model will have a column called 'association name'_id. The different between using has_one and belongs_to only is where you put foreign key and the meaning of association. Check here to clearer.

于 2012-11-12T09:43:38.140 回答
1

我不确定这是正确的协会。belongs_to 关联总是用在具有外键的模型中(见这里)。据我所知,在两个表中都有外键不是一个好主意。你能解释一下为什么你认为最后一个关联是正确的吗?

顺便说一句,我认为正确的关联是:国家有_许多食谱和食谱属于_国家

于 2012-11-12T09:33:32.607 回答