我有一个小应用程序,允许用户上传食谱并保存最喜欢的食谱。我有一个名为country的独立模型,其中包含世界上所有国家/地区,然后允许用户从下拉列表中选择一个。
最初我的关联是
配方
has_one :country
国家
belongs_to :recipe
经过一些研究后,正确的关联是
配方
belongs_to :country
国家
belongs_to :recipe
配方模型中的外键country_id。
我打算做更多阅读,但想知道是否有人可以解释为什么这是这种关联,而不是第一个
答案 0 :(得分:2)
我是客人,你想建立这样的协会:
如果是这样,您应该定义关联:
国家:
has_many :recipes
配方:
belongs_to :country
我认为您的第二次关联也是错误的。
在食谱模型中定义belongs_to :country
时,这意味着您的食谱表必须有一个名为country_id
的列。它是Country模型的外键。
在第一个定义关联中,Country
模型将有一个名为recipe_id
的列,因此,每个国家/地区只有一个食谱,这不是您想要的,对吧?为什么它不起作用?因为一个国家/地区只有一个记录,所以一个国家/地区只能有一个食谱,可通过recipe_id
访问。
通过第一次关联,您的关联一对一(一个国家/地区有一个食谱),而您实际上希望您的关联一对多(一个国家有很多食谱)。所以这就是为什么第一次关联不起作用的原因(第二次也是如此)。
您需要记住的主要事项是,您放置belongs_to
关联的模型,该模型将有一个名为'association name'_id
的列。使用has_one
和belongs_to
之间的区别仅在于您放置外键和表示关联的含义。检查here更清楚。
答案 1 :(得分:1)
我不确定这是正确的关联。 belongs_to关联始终在具有外键的模型中使用(请参阅here)。据我所知,在两个表中都有外键并不是一个好主意。你能解释为什么你认为最后的关联是正确的吗?
顺便说一句,我认为正确的关联是: country has_many食谱和食谱belongs_to国家