为什么在这里设置外键而不是仅仅进行新的迁移?

时间:2014-07-18 21:44:29

标签: ruby-on-rails

好的,这是CodeSchool的一个例子,他们没有解释这里foreign_key选项的作用。

class Tweet < ActiveRecord::Base
  has_one :location, dependent: :destroy, foreign_key: :tweeter_id
end

class Location < ActiveRecord::Base
  belongs_to :tweet, foreign_key: :tweeter_id
end

对我而言,它似乎只是试图避免创建新迁移,以便将tweeter_id列添加到两个模型中。

问题2:

第2行的外键将在tweets表而不是locations表上创建,第6行的外键用于locations表而不是{ {1}}表,对吧?

2 个答案:

答案 0 :(得分:1)

要使用has_one关系,您需要在belong_to部分的数据库中添加属性。这种情况下的导轨标准是tweet_id,但出于这样或那样的原因,编写此代码的人没有遵循标准。如果您查看位置表,则应找到列tweeter_id,该列用于指向正确的tweet

答案 1 :(得分:0)

要回答您的具体问题2,两个位置的外键都是位置模型中的一个键。这两个定义是相关的。

&#39; has_one&#39;正在定义&#34;其他&#34;中的外键。表

&#34; belongs_to&#34;正在定义外键#34;这个&#34;表

这是一个您不必依赖tweet_id

的默认(预期)外键的插图

因为它有效,所以表格没有被破坏&#34;并且不需要被修复&#34;它说明了轨道的灵活性......虽然&#34;约定优于配置&#34;在可能的情况下仍然是首选。

根据您提供的课程,推文表中没有外键。