好的,这是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}}表,对吧?
答案 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;在可能的情况下仍然是首选。
根据您提供的课程,推文表中没有外键。